我正在实施ListView
MultiModeListener
,因此会创建一个选择器元素来突出显示列表中的所选项目。
我的选择器看起来像:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true"
android:drawable="@color/Thistle" />
</selector>
但是,我想要的理想状态如上图所示。喜欢Whatsapp中的选择器。从我所看不到的,有一个半透明的&#34;前景&#34;图像与图标/图像的复选符号在它上面。我想知道如何创建这样的自定义选择器,在每个选定项目的顶部设置我的背景图像和图标。
我在我的Framelayout中使用Selector
作为前景元素,如下所示:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants"
android:padding="6dip"
android:foreground="@drawable/statelist_item_background">
....
我可以在我的FrameLayout
上设置一个自定义选择器来实现这样的效果。如果根本不可能,我如何开始在我的MultiModeListener
回调中以编程方式实施。
PS:看一下Color State documentation建议我们只能在我们andoird:color
中定义的item
中设置Selector
属性。我希望我错了。
修改 - 1
尝试使用layer-list
,如此:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true">
<layer-list>
<item>
<bitmap android:gravity="center" android:src="@drawable/ic_done_white_24dp" />
</item>
<item android:drawable="@color/holo_purple" />
</layer-list>
</item>
</selector>
无法将android:drawable
设置为#80000000
等半透明色。但那并没有奏效。而bitmap
无论如何都不可见。
答案 0 :(得分:0)
我想这可以使用LevelListDrawable
:
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@color/img1"
android:maxLevel="1"
/>
<item
android:drawable="@color/img2"
android:maxLevel="2"
/>
<item
android:drawable="@color/img3"
android:maxLevel="3"
/>
</level-list>
将drawable设置为ImageView
后,您可以致电imageView.setImageLevel(2)
选择相应的图片。你可以拥有任意数量的关卡。
答案 1 :(得分:0)
要创建具有图像和背景颜色的drawable,您应该使用以下设置:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="@color/YourColor" />
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/YourImage" />
</item>
</layer-list>