调用setTextSize后动态添加的RadioButton文本不显示如何解决?
问题根因
直接通过new RadioButton(context)创建的控件,不会自动应用静态XML布局中默认的内边距参数,导致文本内容和左侧默认的单选框图标重叠,所以肉眼看不到文本内容。你通过getText能拿到正确值,是因为文本确实已经被设置到控件里了,只是被遮挡没有渲染到可见区域。
解决方法
两种方案任选即可:
方案1:直接修改现有创建逻辑,添加内边距
在你给RadioButton设置属性的代码中添加内边距配置,给单选框和文本留出足够的显示间距:
首先添加dp转px的工具方法,避免不同设备密度适配问题:
private int dp2px(float dpValue) { float density = getResources().getDisplayMetrics().density; return (int) (dpValue * density + 0.5f); }
然后在RadioButton的配置代码中加入padding设置:
// 其他原有配置不变,新增下面这行 r.setPadding(dp2px(40), dp2px(12), dp2px(12), dp2px(12)); this.radioGroup.addView(r);
如果不需要显示左侧默认的单选框图标,也可以额外添加代码隐藏图标,文本会自动靠左显示:
r.setButtonDrawable(android.R.color.transparent);
方案2(更推荐):通过Inflate加载预定义的RadioButton布局
动态创建复杂控件时更推荐用XML预定义样式,保证和静态添加的控件表现一致,避免主题适配问题:
- 新建布局文件
res/layout/item_radio_btn.xml
<?xml version="1.0" encoding="utf-8"?> <RadioButton xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="20sp" android:textStyle="bold" android:textColor="@android:color/black" android:background="@android:color/green" android:paddingVertical="12dp" android:paddingHorizontal="12dp"/>
- 修改循环创建的代码:
for (int i = 0; i < answers.length; i++) { RadioButton r = (RadioButton) getLayoutInflater().inflate(R.layout.item_radio_btn, radioGroup, false); r.setId(View.generateViewId()); r.setText(answers[i]); r.setOnClickListener(this::onBtnClicked); radioGroup.addView(r); }
内容的提问来源于stack exchange,提问作者Or Abulafia
相关产品推荐
相关产品推荐

