如何在Android 4.4.4中删除RadioButton圈

时间:2016-06-17 13:12:23

标签: android android-layout

我制作了一个自定义的RadioButton,在Android 5.0设备中看起来如下。

enter image description here

这些 RadioButtons 是动态创建的,如以下方法所示。因此,第一个方法 redioButtonPresenterApparence 将其外观设置为删除圆圈(将 buttonDrwable 设置为 null 。第二种方法稍后设置按钮背景。

private void radioButtonPresenterApparence(RadioButton presenter, int icon) {
    Drawable drawable = getResources().getDrawable(icon);
    presenter.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
    presenter.setButtonDrawable(null);
    presenter.setGravity(Gravity.CENTER);
}

private void updateButtonsBackground(){
    int childCount = getChildCount();
    BackgroundSelector bgSelector = new BackgroundSelector(childCount);
    for(int i = 0; i < childCount; i++){
        View rb = getChildAt(i);
        rb.setBackgroundResource( bgSelector.getBackgroundResource(i) );
        rb.requestLayout();
    }

    requestLayout();
}

我的问题是在三星Android 4.4.4设备上进行测试时(不确定其他厂商),显示如下。

enter image description here

PS:这是一个创建了RadioButton的代码。您可以使用以下方法进行检查:

private void addPresenter(int icon){
    RadioButton presenter = new RadioButton(getContext());  //Create new RadioButton
    radioButtonPresenterApparence(presenter, icon);         //Set icon and configure aparence
    addView(presenter);                                     //Add new button to Selector
    presenterParentAparance(presenter);                     //Config button inside parent
    requestLayout();                                        //Request layout update to Selector
}

4 个答案:

答案 0 :(得分:7)

在layout.xml中找到你的单选按钮并给它们:

android:button="@null"

这应该与presenter.setButtonDrawable(null); 做同样的事情 除了这实际上有效

修改

如果是代码创建按钮,请使用:

presenter.setButtonDrawable(new StateListDrawable());

实际上有帮助,因为它相当于

android:button="@null"

答案 1 :(得分:2)

AppCompatRadioButton可以隐藏API <21的圆圈按钮,只需声明以下内容即可

<androidx.appcompat.widget.AppCompatRadioButton
                    android:id="@+id/radio_button"
                    android:button="@null"
                    app:buttonCompat="@null" />

答案 2 :(得分:0)

将自定义可绘制对象设置为单选按钮很简单,您可以通过编程方式编写类似的内容

radioButton.setButtonDrawable(null);
radioButton.setBackgroundResource(R.drawable.your_custom_drawable);

答案 3 :(得分:0)

根据Marijan的回答,我创建了一个 for (let i = 0; i < res.length; i += 1) { if (i % 2) setErrors({ email: test${i}, password: errors.password }); else setErrors({ email: errors.email, password: test2${i} }); console.log('err', errors); } 类,该类重写了WrappedRadioButton方法:

setButtonDrawable

因此,每当我想要带有class WrappedRadioButton : RadioButton { constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet) : super(context, attrs) constructor( context: Context, attrs: AttributeSet, defStyleAttr: Int ) : super(context, attrs, defStyleAttr) @RequiresApi(api = 21) constructor( context: Context, attrs: AttributeSet, defStyleAttr: Int, defStyleRes: Int ) : super(context, attrs, defStyleAttr, defStyleRes) override fun setButtonDrawable(resId: Int) { super.setButtonDrawable(StateListDrawable()) } override fun setButtonDrawable(drawable: Drawable?) { super.setButtonDrawable(StateListDrawable()) } } 的RadioButton时,我都只使用WrappedRadioButton。无需手动调用android:button="@null"