我制作了一个自定义的RadioButton,在Android 5.0设备中看起来如下。
这些 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设备上进行测试时(不确定其他厂商),显示如下。
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
}
答案 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"
。