首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Ripple效果被选中状态覆盖

Android Ripple效果被选中状态覆盖
EN

Stack Overflow用户
提问于 2015-05-12 18:40:36
回答 3查看 4.2K关注 0票数 8

在寻找了一段时间后,我一直没有找到这个问题的答案……

我有一个回收器视图,当选择项目时,具有红色背景和白色文本(预先背景为白色,文本为黑色)。为了做到这一点,我使用了选择器。

我最近试图添加一个涟漪效果,但除非我长时间点击该项目,否则该项目的背景会直接变成红色,而没有涟漪。我假设这是因为选择器状态state_selected覆盖了sate_pressed上的波纹?

有没有人知道有没有办法解决这个问题?下面是我使用的选择器代码:

代码语言:javascript
复制
<?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>

提前感谢!

EN

回答 3

Stack Overflow用户

发布于 2015-07-10 16:02:49

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

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

  • values/colors.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="selector_color">#660000ff</color>
</resources>

你可能想要兼容之前的棒棒糖。将一个典型的老式选择器放在可抽屉文件夹中:

  • drawable/selector_background.xml

代码语言:javascript
复制
<?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

代码语言:javascript
复制
<?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作为选择器。

票数 17
EN

Stack Overflow用户

发布于 2017-06-16 15:21:28

所以我有另一个例子,我不得不使用选择器和图层列表

代码语言:javascript
复制
<?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>

这很管用,如果你没有任何分层,你只需要用你的项目形状替换项目的波纹就行了。希望这能有所帮助

票数 1
EN

Stack Overflow用户

发布于 2015-07-16 18:47:46

如果您将回收器视图项目视图包装在FrameLayout中,并设置FrameLayout的android:background="?selectableItemBackground“和FrameLayout background=的子布局”@drawable/background=“,效果会更好。

background.xml

代码语言:javascript
复制
<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"属性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30188426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档