选定状态覆盖Android Ripple效果

时间:2015-05-12 10:40:36

标签: android android-5.0-lollipop android-recyclerview ripple rippledrawable

经过一段时间的寻找之后,我一直无法找到答案......

我有一个带有物品的回收者视图,当选择这些物品时,它们有红色背景和白色文字(事先背景为白色,文字为黑色)。要做到这一点,我使用选择器。

我最近尝试为此添加涟漪效果,但除非我长按项目,否则项目的背景会直接变为红色而没有波纹。我假设这是因为选择器状态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>

提前致谢!

3 个答案:

答案 0 :(得分:17)

要创建具有连锁效果并显示所选状态的选择器背景,请执行以下操作:

首先定义高亮颜色,并保持透明度:

  • 值/ colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="selector_color">#660000ff</color>
</resources>

您可能希望拥有兼容性pre-lollipop。将一个典型的老式选择器放在drawable文件夹中:

  • 抽拉/ selector_background.xml
<?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:

  • 绘制-V21 / selector_background.xml
<?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>

如果您没有任何分层,那么根据您的需要,您可以使用您的项目形状替换波纹下的项目。 希望这有帮助