我正在android中开发一个基本的绘图应用程序,我似乎无法以编程方式为我的单选按钮设置自定义绘图。这些单选按钮由一个LayerDrawable
组成,边框为白色ColorDrawable
,中心为黄色(或任何颜色)ColorDrawable
。我在LayerDrawable
中将此StateListDrawable
与另一个({黑色边框表示选择)放在一起,以保留RadioButton
功能。
但是当我尝试setButtonDrawable(myDrawable)
时,即使我指定宽度和高度为RadioButton
,30dp
也占据一个非常小的区域。
然后当我尝试setButtonDrawable(null)
和setBackground(myDrawable)
时,我的RadioButton
不再具有其功能。
这是我的代码
private void setupColorButtons() {
int[] colors = {Color.RED, Color.GREEN, Color.BLUE,
Color.YELLOW, Color.CYAN, Color.MAGENTA};
int childCount = mColorGroup.getChildCount();
for (int i = 0; i < childCount; i++) {
RadioButton colorButton = (RadioButton) mColorGroup.getChildAt(i);
colorButton.setButtonDrawable(createColorButtonDrawable(colors[i]));
}
}
private Drawable createColorButtonDrawable(int color) {
ColorDrawable center = new ColorDrawable(color);
ColorDrawable selBorder = new ColorDrawable(R.color.black);
ColorDrawable unselBorder = new ColorDrawable(R.color.white);
LayerDrawable sel = new LayerDrawable(new Drawable[] {selBorder, center});
sel.setLayerInset(1, 2, 2, 2, 2);
LayerDrawable unsel = new LayerDrawable(new Drawable[] {unselBorder, center});
unsel.setLayerInset(1, 2, 2, 2, 2);
StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_checked}, sel);
states.addState(new int[] {-android.R.attr.state_checked}, unsel);
return states;
}
我已经查看了类似的问题,但每个解决方案都要求我创建自定义xml样式。我只是想知道是否有人知道如何以编程方式设置自定义StateListDrawable
。在此先感谢您的帮助!
答案 0 :(得分:2)
试试这段代码:
StateListDrawable mState1 = new StateListDrawable();
mState1.addState(new int[] { android.R.attr.state_pressed },
getResources().getDrawable(R.drawable.button3_pressed));
mState1.addState(new int[] { android.R.attr.state_focused },
getResources().getDrawable(R.drawable.button3_focused));
mState1.addState(new int[] {},
getResources().getDrawable(R.drawable.button3_up));
myButton.setBackgroundDrawable(mState1);
答案 1 :(得分:1)
这增加了Leo的答案。如果你想要一个假的状态,例如,一个禁用的按钮,没有状态 - android.R.attr.state_disabled,所以你可以使资源引用为负(在之前添加“ - ”):
state.addState(new int [] {android.R.attr.state_checked, -android.R.attr.state_enabled },...);