微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 更改视图的颜色,但保持波纹和触摸状态

开箱即用,您可以从以下位置获得白色波纹/触摸状态:
?ATTR / selectableItemBackground
我希望能够做任何颜色,并且纹波和触摸状态只是根据我设置的颜色工作.如果我能通过 android:theme做到这一点会很好

我需要这个才能使用API​​ 15

我知道我可以做一个选择器和一个波纹但是我必须为每种颜色做一个选择器,因为你不能在xml pre API 21中做attr.

如果我只为背景设置一种颜色,那么纹波和触摸状态就不起作用.

我希望这样做尽可能简单和可重用.

是否有我遗漏的东西或任何相对干净的解决方案.

解决方法

您已发布的内容非常正确:

>仅通过指定颜色无法创建纹波选择器
>使用API​​<无法在xml中使用主题属性21
我认为除了自己使用库或编码之外别无其他.从代码中,您可以生成涟漪,使用主题属性等.

我有同样的问题,我只是写了一堆类来轻松创建波纹.例如,为了获得主题颜色,我写了一个简单的ColorStateList类:

public class ControlCheckedColorStateList extends ColorStateList {
    public ControlCheckedColorStateList(Context context) {
        super(new int[][]{
                new int[]{android.R.attr.state_checked},new int[]{}
        },new int[]{
                getThemeColor(context,R.attr.colorPrimary),getThemeColor(context,R.attr.colorControl)
        });
    }

    public static int getThemeColor(Context context,int attr) {
        Resources.Theme theme = context.getTheme();
        TypedValue typedvalueattr = new TypedValue();
        theme.resolveAttribute(attr,typedvalueattr,true);
        return typedvalueattr.resourceId != 0 ? context.getResources().getColor(typedvalueattr.resourceId) : typedvalueattr.data;
    }
}

然后我添加了波纹颜色和样式的属性.我还必须覆盖setBackground方法,因此为视图设置波纹不会清除其背景.现在使用自定义颜色设置波纹非常简单:

<carbon.widget.Button
    android:background="#ffffffff"
    app:carbon_rippleColor="#40ff0000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

有很多代码行,所以我认为在这里发布所有内容并不合理.如果您愿意,可以从我的库中打开任何窗口小部件类,并检查它是否是您要查找的内容.您可以在github找到我的代码.如有任何问题,请随时提出.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐