我正在Android应用中构建表单。
表单有几个字段,其中两个组件是RadioGroups。包含其按钮的第一组完全在活动的布局文件中定义。对于第二组,只有RadioGroup元素在布局文件中定义,然后在运行时将RadioButtons添加到组中。
正如您在下图中看到的,我遇到了一些样式问题。第二组中的单选按钮看起来与第一组中的按钮不同。按钮图像和第二组的文本颜色不同。除了按钮的方向,两个RadioGroup都配置了相同的属性。当我在布局文件中直接添加第二组的按钮时,它们的外观与第一组相同。
布局文件。
<RadioGroup
android:id="@+id/radio_gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_male"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/checkout_gender_male" />
<RadioButton
android:id="@+id/radio_female"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/checkout_gender_female" />
</RadioGroup>
...
<RadioGroup
android:id="@+id/radio_payment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:layout_marginTop="4dp" >
</RadioGroup>
添加单选按钮的代码。
RadioGroup paymentGroup = (RadioGroup) findViewById(R.id.radio_payment);
RadioGroup.LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
for (String paymentType: checkoutData.getPaymentTypes()) {
RadioButton radioButton = new RadioButton(getBaseContext());
radioButton.setText(paymentType);
paymentGroup.addView(radioButton, params);
}
如何通过代码存档第2组按钮的相同外观?
更新1
我做了一些测试。
我已经在以下配置中进行了测试。
当我通过在布局文件中添加一个按钮和以编程方式添加两个按钮来混合第二个组时,结果仍然相同。第一个按钮(在布局中定义)看起来像预期的,其他两个按钮使用不同的按钮图形并具有不同的文本颜色。
答案 0 :(得分:1)
好的,我找到了解决问题的方法。
我使用了错误的上下文来创建RadioButton。
而不是
RadioButton radioButton = new RadioButton(getBaseContext());
我必须使用
RadioButton radioButton = new RadioButton(getContext);
或
RadioButton radioButton = new RadioButton(this); // this is the Activity
我不知道为什么我在这里使用了基本上下文,因为我之前从未使用它。如果我没记错,那么Context对象可以包含有关Activity的布局样式的信息。我想当我使用基本上下文时,这些信息丢失了,因此单选按钮的外观不同。