3

Androidアプリでフォームを作成しています。

フォームには、2つのコンポーネントがRadioGroupsであるいくつかのフィールドがあります。ボタンを含む最初のグループは、アクティビティのレイアウトファイルで完全に定義されています。2番目のグループの場合、RadioGroup要素のみがレイアウトファイルで定義され、実行時にRadioButtonがグループに追加されます。

下の画像でわかるように、スタイリングの問題が発生しました。2番目のグループのラジオボタンは、最初のグループのボタンとは異なって見えます。2番目のグループのボタンの画像とテキストの色は異なります。ボタンの向きのほかに、両方のRadioGroupsは同じ属性で構成されています。2番目のグループのボタンをレイアウトファイルに直接追加すると、最初のグループと同じように見えます。

ここに画像の説明を入力してください

レイアウトファイル。

<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

さらにテストを行いました。

次の構成でテストしました。

  • エミュレーター-GoogleAndroid4.1.1:同じ動作
  • エミュレーター-GoogleAndroid2.3.4:動作は同じですが、すべてのRadioButtonのグラフィックは同じですが、テキストの色は異なります。このバージョンのAndroidでは、ボタンのグラフィックは1つだけだと思います。
  • デバイス-NexusOne-AndroidCyanogenmod 7(Android 2.3.7):Android2.3.4を搭載したエミュレーターと同じ動作

レイアウトファイルに1つのボタンを追加し、プログラムで2つのボタンを追加して、2番目のグループを混ぜ合わせても、結果は同じです。最初のボタン(レイアウトで定義)は予想どおりに見えます。他の両方のボタンは異なるボタングラフィックを使用し、異なるテキストの色を持っています。

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オブジェクトには、アクティビティのレイアウトのスタイルに関する情報を含めることができます。基本コンテキストを使用したとき、この情報が欠落していたため、ラジオボタンの外観が異なっていたと思います。

于 2012-09-20T16:23:05.037 に答える