在寻找了一段时间后,我一直没有找到这个问题的答案……
我有一个回收器视图,当选择项目时,具有红色背景和白色文本(预先背景为白色,文本为黑色)。为了做到这一点,我使用了选择器。
我最近试图添加一个涟漪效果,但除非我长时间点击该项目,否则该项目的背景会直接变成红色,而没有涟漪。我假设这是因为选择器状态state_selected覆盖了sate_pressed上的波纹?
有没有人知道有没有办法解决这个问题?下面是我使用的选择器代码:
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@android:color/holo_red_dark" >
<item>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/ripple"
android:state_pressed="true"/>
<item
android:drawable="@android:color/holo_red_dark"
android:state_selected="true"/>
<item android:drawable="@android:color/white"/>
</selector>
</item>
</ripple>提前感谢!
发布于 2015-07-10 16:02:49
要创建具有涟漪效果并显示选定状态的选择器背景,我执行以下操作:
首先定义您的高亮颜色,并带有一些透明度:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="selector_color">#660000ff</color>
</resources>你可能想要兼容之前的棒棒糖。将一个典型的老式选择器放在可抽屉文件夹中:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/selector_color" android:state_pressed="true"/>
<item android:drawable="@color/selector_color" android:state_selected="true"/>
<item android:drawable="@android:color/transparent"/>
</selector>然后在drawable-v21文件夹中添加以下可绘制的图层:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<selector>
<item android:state_selected="true"
android:drawable="@color/selector_color" />
<item android:drawable="@android:color/transparent" />
</selector>
</item>
<item>
<ripple android:color="@color/selector_color">
<item android:id="@android:id/mask">
<color android:color="@android:color/white" />
</item>
</ripple>
</item>
</layer-list>现在,您可以使用@drawable/selector_background作为选择器。
发布于 2017-06-16 15:21:28
所以我有另一个例子,我不得不使用选择器和图层列表
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorRipple">
<item>
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/grey_very_light" />
</shape>
</item>
<!-- ripple color -->
<item android:bottom="1dp">
<shape android:shape="rectangle">
<solid android:color="@color/c_unread_notifications_item" />
</shape>
</item>
</layer-list>
</item>
</ripple>
</item>
<item>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorRipple">
<item>
<!-- ripple color -->
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/grey_very_light" />
</shape>
</item>
<item android:bottom="1dp">
<shape android:shape="rectangle">
<solid android:color="@color/white" />
</shape>
</item>
</layer-list>
</item>
</ripple>
</item>
</selector>这很管用,如果你没有任何分层,你只需要用你的项目形状替换项目的波纹就行了。希望这能有所帮助
发布于 2015-07-16 18:47:46
如果您将回收器视图项目视图包装在FrameLayout中,并设置FrameLayout的android:background="?selectableItemBackground“和FrameLayout background=的子布局”@drawable/background=“,效果会更好。
background.xml
<item android:drawable="@color/red" android:state_selected="true"/>
<item android:drawable="@color/red" android:state_focused="true"/>
<item android:drawable="@color/red" android:state_pressed="true"/>
<item android:drawable="@color/white"/>
然后子布局必须具有android:duplicateParentState="true"属性
https://stackoverflow.com/questions/30188426
复制相似问题