Android 以编程方式设置单选按钮的自定义绘图选项

Android 以编程方式设置单选按钮的自定义绘图选项,android,radio-button,android-drawable,Android,Radio Button,Android Drawable,我正在用android开发一个基本的绘画应用程序,但我似乎无法通过编程为我的单选按钮设置自定义的绘图。这些单选按钮包括一个图层可绘制,边框为白色彩色可绘制,中间为嵌入式黄色(或任何颜色)彩色可绘制。我将此LayerDrawable与另一个StateListDrawable放在一起(它有黑色边框表示选择),以保留单选按钮的功能 但是当我尝试setButtonDrawable(myDrawable)时,RadioButton占据了一个非常小的区域,即使我将宽度和高度指定为30dp 然后,当我尝试se

我正在用android开发一个基本的绘画应用程序,但我似乎无法通过编程为我的单选按钮设置自定义的绘图。这些单选按钮包括一个
图层可绘制
,边框为白色
彩色可绘制
,中间为嵌入式黄色(或任何颜色)
彩色可绘制
。我将此
LayerDrawable
与另一个
StateListDrawable
放在一起(它有黑色边框表示选择),以保留
单选按钮的功能

但是当我尝试
setButtonDrawable(myDrawable)
时,
RadioButton
占据了一个非常小的区域,即使我将宽度和高度指定为
30dp

然后,当我尝试
setButtonDrawable(null)
setBackground(myDrawable)
时,我的
单选按钮不再具有其功能

这是我的密码

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;
}
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
我已经研究过类似的问题,但每个解决方案都要求我创建自定义xml样式。我只是想知道是否有人知道如何以编程方式设置自定义的
StateListDrawable
。提前感谢您的帮助

请尝试以下代码:

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);

这增加了狮子座的答案。如果您想给出一个为false的状态,例如,禁用按钮,则没有状态-android.R.attr.state\u disabled,因此您可以将资源引用设置为负值(在之前添加“-”):

state.addState(新int[]{android.R.attr.state_已选中,-android.R.attr.state_已启用,},…)