选定状态覆盖Android Ripple效果

Zur*_*rvæ 8 android ripple rippledrawable android-5.0-lollipop android-recyclerview

在寻找一段时间之后,我无法找到答案......

我有一个带有物品的回收者视图,当选择这些物品时,它们具有红色背景和白色文本(事先背景为白色,文本为黑色).为此,我使用选择器.

我最近试图为此添加一个涟漪效果,但除非我长时间点击该项目,项目的背景直接变为红色而没有波纹.我假设这是因为选择器状态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>
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Dan*_*lle 17

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

首先定义您的高亮颜色,并具有一些透明度:

  • 值/ colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="selector_color">#660000ff</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

你可能想要兼容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>
Run Code Online (Sandbox Code Playgroud)

然后在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>
Run Code Online (Sandbox Code Playgroud)

现在您可以使用@drawable/selector_background您的选择器.

  • 对于其他人,当使用按钮时,此图层列表方法有效,但您需要使用state_activated (2认同)