经过一段时间的寻找之后,我一直无法找到答案......
我有一个带有物品的回收者视图,当选择这些物品时,它们有红色背景和白色文字(事先背景为白色,文字为黑色)。要做到这一点,我使用选择器。
我最近尝试为此添加涟漪效果,但除非我长按项目,否则项目的背景会直接变为红色而没有波纹。我假设这是因为选择器状态state_selected覆盖了sate_pressed上的纹波?
有没有人知道是否有办法解决这个问题?这是我使用的选择器代码:
<div class="leftside" id="leftbar">
<nav class="menu-top">
<ul class="off-canvas-list" style="font-size: 25px;font-weight: bold">
<li style="padding-top: 2.7rem"></li>
<?php foreach ($item_list as $list) {
echo "<li><a href='/welcome/shop_search/" . $list->type . "'>" . $list->type . "</a></li>";
//select * from types where sub=list->type
//$num_rows = mysql_num_rows($select)
if($num_rows>0){
echo '<ul>';
//for each
//sub
echo '</ul>';
}
}
?>
</ul>
提前致谢!
答案 0 :(得分:17)
要创建具有连锁效果并显示所选状态的选择器背景,请执行以下操作:
首先定义高亮颜色,并保持透明度:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="selector_color">#660000ff</color>
</resources>
您可能希望拥有兼容性pre-lollipop。将一个典型的老式选择器放在drawable文件夹中:
<?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文件夹中添加以下图层drawable:
<?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
作为选择器。
答案 1 :(得分:0)
如果你在frameLayout中包装你的recyclerview项目视图并设置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”
答案 2 :(得分:0)
所以我有另一个案例,我必须使用选择器以及
的图层列表<?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>
如果您没有任何分层,那么根据您的需要,您可以使用您的项目形状替换波纹下的项目。 希望这有帮助