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找到我的代码.如有任何问题,请随时提出.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...