如何在android中为不同颜色的按钮重用选择器?

Posted

技术标签:

【中文标题】如何在android中为不同颜色的按钮重用选择器?【英文标题】:How to reuse selector for color-different buttons in android? 【发布时间】:2014-12-15 09:45:39 【问题描述】:

有按钮的选择器文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="true">
    <shape>
        <solid android:color="#686b70"/>

        <stroke android: android:color="#595b61" />

        <corners android:radius="8dip" />
    </shape>
</item>

<item android:state_focused="true">
    <shape>
        <solid android:color="#686b70"/>

        <stroke android: android:color="#595b61" />

        <corners android:radius="8dip" />
    </shape>

</item>
<item>
    <shape>
        <solid android:color="#868c95"/>

        <stroke android: android:color="#7c818b" />

        <corners android:radius="8dip" />
    </shape>
</item>

我只需要更改solid 和stroke 的android:color 来创建一个新的选择器。所以我想知道有没有办法将此选择器重用于颜色不同的按钮。

【问题讨论】:

您需要使用 java 代码以编程方式创建选择器和形状。 @BirajZalavadia xml 不能这样做吗? 正如你所说,你想要它动态。并且 xmls 在编译时。您不能在运行时编写 xml。 @BirajZalavadia 我想是的,谢谢 【参考方案1】:

查看这些代码 sn-p 可能会对您有所帮助

创建形状运行时

ShapeDrawable shapeSelected = new ShapeDrawable(new RectShape());
        shapeSelected.getPaint().setColor(Color.RED);
        shapeSelected.getPaint().setStyle(Paint.Style.STROKE);
        shapeSelected.getPaint().setStrokeWidth(1);

        ShapeDrawable shapeNormal = new ShapeDrawable(new RectShape());
        shapeSelected.getPaint().setColor(Color.WHITE);
        shapeSelected.getPaint().setStyle(Paint.Style.STROKE);
        shapeSelected.getPaint().setStrokeWidth(1);

在运行时创建选择器

StateListDrawable states =new StateListDrawable();
    Resources res = getResources();
    states.addState(new int[] android.R.attr.state_pressed,shapeSelected);
    states.addState(new int[] android.R.attr.state_focused, shapeSelected);
    states.addState(new int[] , shapeNormal);

设置为视图的背景

yourButton.setBackground(states);

【讨论】:

只是一个小实现:gist.github.com/creativepsyco/8c2d05803a5193c187ef

以上是关于如何在android中为不同颜色的按钮重用选择器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 选择器中定义粗体?

如何在一个 CSS 类中为按钮设置不同的颜色

选择器按钮的颜色在 android 5.1 上没有改变

具有不同背景颜色的 Android 按钮

Flutter - 如何根据按钮是在应用栏还是主屏幕中为平面按钮设置不同颜色的文本

按钮文本颜色的单独日/夜选择器