我在以下网站中使用的视图代码:
<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中使用此视图,然后在recyclelerView中使用。图标的色调保持白色。在触摸它时不会改变(就像我想要的那样)黑色。
答案 0 :(得分:0)
在选择器
中添加此行android:background="@color/white"
android:state_focused="true"
答案 1 :(得分: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
在API 21之前不支持基于选择器的着色,因此您必须使用支持库方法才能使其工作。 ContextCompat
方法允许您访问图像和颜色选择器,然后DrawableCompat
方法实际上将色调应用于图像。最后,您必须使ImageView
“可点击”,否则它将永远不会处于按下状态。
修改强>
我刚刚注意到你说你在RecyclerView
内使用了这个。因此,我上面发布的Java代码必须位于onCreateViewHolder()
或onBindViewHolder()
。因此,this
不是Context
方法的ContextCompat
实例的有效引用;而是使用itemView.getContext()
。