如何在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中为不同颜色的按钮重用选择器?的主要内容,如果未能解决你的问题,请参考以下文章