在Android中以编程方式添加到RadioGroup时,RadioButtons具有不同的样式

时间:2012-09-19 10:18:51

标签: android styles radio-button radio-group

我正在Android应用中构建表单。

表单有几个字段,其中两个组件是RadioGroups。包含其按钮的第一组完全在活动的布局文件中定义。对于第二组,只有RadioGroup元素在布局文件中定义,然后在运行时将RadioButtons添加到组中。

正如您在下图中看到的,我遇到了一些样式问题。第二组中的单选按钮看起来与第一组中的按钮不同。按钮图像和第二组的文本颜色不同。除了按钮的方向,两个RadioGroup都配置了相同的属性。当我在布局文件中直接添加第二组的按钮时,它们的外观与第一组相同。

enter image description here

布局文件。

<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

我做了一些测试。

我已经在以下配置中进行了测试。

  • 模拟器 - 谷歌Android 4.1.1:相同的行为
  • 模拟器 - 谷歌Android 2.3.4:相同的行为但所有RadioButtons的图形相同,但文本颜色仍然不同。我想在这个版本的Android中只有一个按钮图形。
  • 设备 - Nexus One - Android Cyanogenmod 7(Android 2.3.7):与使用Android 2.3.4的模拟器上的行为相同

当我通过在布局文件中添加一个按钮和以编程方式添加两个按钮来混合第二个组时,结果仍然相同。第一个按钮(在布局中定义)看起来像预期的,其他两个按钮使用不同的按钮图形并具有不同的文本颜色。

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的布局样式的信息。我想当我使用基本上下文时,这些信息丢失了,因此单选按钮的外观不同。