Android 将自定义编程创建的drawable设置为状态的radioButton

Android 将自定义编程创建的drawable设置为状态的radioButton,android,android-custom-view,android-drawable,android-radiobutton,android-custom-drawable,Android,Android Custom View,Android Drawable,Android Radiobutton,Android Custom Drawable,我想为其选中和未选中状态设置一个通过编程创建的drawable to单选按钮,但它不起作用。我的代码如下所示 用于绘制矩形框的代码 public static GradientDrawable squareView(int backgroundColor, int borderColor) { GradientDrawable shape = new GradientDrawable(); shape.setShape(GradientDrawable.RECTANGLE);

我想为其选中和未选中状态设置一个通过编程创建的drawable to单选按钮,但它不起作用。我的代码如下所示

用于绘制矩形框的代码

public static GradientDrawable squareView(int backgroundColor, int borderColor)
{
    GradientDrawable shape = new GradientDrawable();
    shape.setShape(GradientDrawable.RECTANGLE);
    //shape.setCornerRadii(new float[] { 8, 8, 8, 8, 0, 0, 0, 0 });
    shape.setColor(backgroundColor);
    shape.setStroke(3, borderColor);
    return shape;
}
将编程创建的视图(squareview)设置为radiobutton所述设置的代码

public static void setChecked_Selector(Context context,RadioButton view) {
    try {
        Drawable pressed=squareView(ContextCompat.getColor(context,R.color.colorBlue),ContextCompat.getColor(context,R.color.colorRed));//new BadgeDrawable(context,colorPressed);
        Drawable normal=squareView(ContextCompat.getColor(context,R.color.colorwhite),ContextCompat.getColor(context,R.color.colorRed));

        StateListDrawable states = new StateListDrawable();
        states.addState(new int[]{android.R.attr.state_checked,},pressed);
        states.addState(new int[]{android.R.attr.state_pressed}, pressed);

        states.addState(new int[]{android.R.attr.state_checked, android.R.attr.state_enabled}, pressed);
        states.addState(new int[]{android.R.attr.state_checked, -android.R.attr.state_enabled}, pressed);

        states.addState(new int[]{}, normal);
        view.setButtonDrawable(states);
    } catch (Exception e) {
    }
}

经过一段时间的研究,我意识到问题在于可拉丝布没有任何尺寸。我不确定您应该给出多大的尺寸,但只需添加以下行即可使您的
单选按钮可见:

shape.setSize(50, 50);
我建议在
dimens.xml
中为其设置适当的大小,并使用以下内容:

int size = context.getResources().getDimensionPixelSize(R.dimen.radio_button_size);
shape.setSize(size, size);

你因未经检查而错过了这个州。不是吗?states.addState(new int[]{android.R.attr.state_选中,-android.R.attr.state_启用},按下);这是针对取消选中条件的,不是针对
已选中:true
已启用:false
?我想你需要类似于
(new int[]{-android.R.attr.state\u checked},按下)
(new int[]{-android.R.attr.state\u checked,android.R.attr.state\u enabled},按下)
@Rehan。不管怎样,谢谢