2017-08-30 71 views
0

代碼我使用它:state_pressed不是在顏色選擇工作的色調爲視圖的imageview的

<ImageView 
      android:layout_width="20dp" 
      android:layout_height="25dp" 
      android:background="@drawable/ic_bookmark_border_black_24dp" 
      android:layout_below="@+id/author" 
      android:layout_alignRight="@+id/dots" 
      android:tint="@color/bookmark_color_selector" 
      android:id="@+id/bookmark"/> 

的顏色選擇器的代碼:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:color="@android:color/black" android:state_pressed="true"/> 
<item android:color="@android:color/white"/> 
</selector> 

更多信息:我在cardView中使用此視圖,然後在recyclerView中使用該視圖。圖標的色調保持白色。不會改變(就像我想要的那樣)在接觸它時會變黑。

+0

如果你把這個選擇器放到''android:background'''中,它能工作嗎? – wzieba

+0

我已經使用該圖標的android背景屬性。 – Chirag

+0

好吧,我明白,但讓我們嘗試這樣做,看看如果然後背景變化 – wzieba

回答

0

在選擇

android:background="@color/white" 
android:state_focused="true" 
+0

我已經使用了android圖標的背景屬性。 – Chirag

+0

它工作嗎? –

0

你將不得不做出一些改動添加此行也是如此。首先,從你的<ImageView>標記刪除這兩條線:

 android:background="@drawable/ic_bookmark_border_black_24dp" 
     android:tint="@color/bookmark_color_selector" 

並添加此行:

 android:clickable="true" 

然後,在你的Java代碼,無論你吹這個ImageView(可能在你活動的onCreate()法) ,請添加此代碼:

ImageView bookmark = (ImageView) findViewById(R.id.bookmark); 
    Drawable icon = ContextCompat.getDrawable(this, R.drawable. ic_bookmark_border_black_24dp); 
    ColorStateList tint = ContextCompat.getColorStateList(this, R.color.bookmark_color_selector); 
    DrawableCompat.setTintList(icon, tint); 
    bookmark.setImageDrawable(icon); 

這是怎麼回事?

基本上,ImageView s不支持在API 21之前根據選擇器進行着色,因此您必須使用支持庫方法使其工作。 ContextCompat方法允許您訪問您的圖像和顏色選擇器,然後DrawableCompat方法實際上將色調應用於圖像。最後,你必須讓你的ImageView「可點擊」,否則它永遠不會處於按下狀態。

編輯 我剛剛注意到你說你在RecyclerView裏面使用了這個。所以我上面發佈的Java代碼必須是onCreateViewHolder()onBindViewHolder()。因此,this不是對ContextCompat方法Context實例的有效參考;改爲使用itemView.getContext()