【问题标题】:How to remove RadioButton circle in Android 4.4.4如何在 Android 4.4.4 中删除 RadioButton 圆圈
【发布时间】:2016-10-19 08:18:37
【问题描述】:

我制作了一个自定义 RadioButton,在 Android 5.0 设备中如下所示。

这些 RadioButtons 是动态创建的,如以下方法所示。所以第一个方法 redioButtonPresenterApparence 设置它的外观去除圆圈(设置 buttonDrwablenull。第二个方法稍后设置按钮背景。

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 设备上进行相同测试时(不确定其他制造商),它显示如下。

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
}

【问题讨论】:

  • Google 搜索“android 自定义单选按钮”
  • 尝试将 android:button="@null" 放入您的 xml 并运行
  • @AnuragPandit 我已经在 presenter.setButtonDrawable(null) 做这件事了

标签: android android-layout


【解决方案1】:

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

android:button="@null"

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

编辑:

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

presenter.setButtonDrawable(new StateListDrawable());

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

android:button="@null"

【讨论】:

  • 这不是一个膨胀的布局。它是创建的代码。我会把它添加到问题中。
  • 在这种情况下,试试这个:presenter.setButtonDrawable(new StateListDrawable());这相当于android:button="@null"
  • 您能否将其添加到您的答案中,我会接受它。使用 new StateListDrawable() 而不是 null 时按预期工作
【解决方案2】:

AppCompatRadioButton可以隐藏API

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

【讨论】:

    【解决方案3】:

    根据 Marijan 的回答,我创建了一个覆盖 setButtonDrawable 方法的 WrappedRadioButton 类:

    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())
        }
    }
    

    所以每当我想要一个带有android:button="@null" 的 RadioButton 时,我只需要使用 WrappedRadioButton。无需手动拨打setButtonDrawable

    【讨论】:

      【解决方案4】:

      你也可以试试android:button="?android:selectableItemBackground"

      发件人:https://stackoverflow.com/a/18537061/5093308

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-09-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-15
          • 1970-01-01
          相关资源
          最近更新 更多