pre-lollipop版本的selectableItemBackground颜色变化

时间:2015-08-07 09:32:13

标签: android ripple

对于Lollipop,可以使用colorControlHighlight简单地修改波纹颜色。但是对于pre-Lollipop(< API21),如何通过将背景设置为?attr/selectableItemBackground

来更改按下状态的颜色

2 个答案:

答案 0 :(得分:1)

你可以简单地使用它:

<item name="colorControlHighlight">@color/yourColor</item>

答案 1 :(得分:0)

修改:现在可以使用AppCompat和backgroundTint

   backgroundTint="@color/yourColor"

以前的解决方案:

不确定这是你想要的,但我最终以编程方式执行此操作:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        ColorStateList colors = new ColorStateList(new int[][]{
                new int[]{android.R.attr.state_enabled},
        }, new int[]{pressed});
        GradientDrawable item = new GradientDrawable();
        item.setCornerRadius(radius);
        item.setColor(normal);
        RippleDrawable ripple = new RippleDrawable(colors, item, null);
        button.setBackgroundDrawable(ripple);
    } else {
        StateListDrawable stateListDrawable = new StateListDrawable();
        GradientDrawable item;
        item = new GradientDrawable();
        item.setCornerRadius(radius);
        item.setColor(pressed);
        stateListDrawable.addState(new int[]{android.R.attr.state_enabled, android.R.attr.state_pressed}, item);
        item = new GradientDrawable();
        item.setCornerRadius(radius);
        item.setColor(normal);
        stateListDrawable.addState(new int[]{android.R.attr.state_enabled}, item);
        button.setBackgroundDrawable(stateListDrawable);
    }