如何设置state_selected在波纹drawable

如何在android:state_selected指定android:state_selected state_selected

我有以下的XML纹波绘制,但背景颜色不显示时,我设置myView.setSelected(true);

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#DDDDDD" > <item android:id="@android:id/mask"> <shape> <solid android:color="@color/black" /> </shape> </item> <item android:state_selected="true"> <shape> <solid android:color="#EEEEEE" /> </shape> </item> <item> <color android:color="#FFFFFF" /> </item> </ripple> 

find答案,以防万一别人有同样的问题

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="#DDDDDD" > <item> <selector> <item android:state_selected="true"> <color android:color="#EEEEEE" /> </item> <item android:state_activated="true"> <color android:color="#EEEEEE" /> </item> <item> <color android:color="#FFFFFF" /> </item> </selector> </item> </ripple> 

要添加到@Sohaib的答案:

@Alanv是正确的,OP不需要面具。 但是,如果你的一个select器状态是透明的,你需要一个掩码它会在这里:

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/ripple_color"> <!-- mask here... --> <item android:id="@android:id/mask"> <color android:color="@color/black"/> <!-- any color will do --> </item> <item> <selector> <!-- ... NOT here. --> <item android:state_selected="true"> <color android:color="@color/blue"/> </item> <item android:state_activated="true"> <color android:color="@color/red"/> </item> <item> <color android:color="@color/transparent"/> </item> </selector> </item> </ripple> 

我最初在我的select器里面有面具:boom:

将上述答案与以下其他答案结合起来:

纹波的颜色应该是什么,colorPrimary或​​colorAccent? (材料devise)

给出一个很好的涟漪效应,这也适用于该项目处于选定状态。

 <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?attr/colorControlHighlight"> <!-- Ripple mask - applied to all selector states --> <item android:id="@android:id/mask"> <color android:color="#42ffffff" /> </item> <!-- Selected state of item --> <item> <selector> <item android:state_selected="true"> <color android:color="?attr/colorAccent" /> </item> </selector> </item> </ripple> 

这在你的drawable-v21文件夹中,对于其他平台,你可以创build一个使用重音颜色的select器:

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/accent" android:state_selected="true"/> <item android:drawable="@color/accent" android:state_pressed="true"/> </selector> 

我想模仿“材质devise”checkbox的行为,但直到我使用ColorStateList之后才能正确使用它们:

在drawable-v21 / bg_c​​heckbox_ripple.xml中

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/checked_accent_statelist" android:radius="24dp"> </ripple> 

在color / checked_accent_statelist.xml中

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="?colorControlHighlight" android:state_checked="false"/> <item android:color="?android:textColorHighlight" android:state_checked="true"/> </selector> 

属性“?android:textColorHighlight”是你的口音颜色,但是在涟漪中使用它的正确透明度(我认为是26%)。

另外,还应该为drawable / bg_c​​heckbox_ripple.xml中的API 21设备提供回退

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime"> <item> <shape android:innerRadius="24dp" android:shape="oval"> <solid android:color="@color/checked_accent_statelist"/> </shape> </item> </selector>