3

我正在 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

我又做了一些测试。

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

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

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

4

1 回答 1

1

好的,我找到了解决问题的方法。

我使用了错误的上下文来创建 RadioButton。

代替

RadioButton radioButton = new RadioButton(getBaseContext());

我必须使用

RadioButton radioButton = new RadioButton(getContext);

或者

RadioButton radioButton = new RadioButton(this); // this is the Activity

我不知道为什么我在这里使用基本上下文,因为我以前从未使用过它。如果我没记错的话,Context 对象可以包含有关 Activity 布局样式的信息。我想当我使用基本上下文时,缺少此信息,因此单选按钮看起来不同。

于 2012-09-20T16:23:05.037 回答