web-dev-qa-db-ja.com

Androidラジオグループ、ラジオボタン間の仕切り

RadioButtons内のRadioGroupの間に仕切りを追加する簡単な方法はありますか? divider xml属性を使用しようとしましたが、機能していないようです。関連する場合、私のレイアウトのRadioGroupには子ビューが含まれていません。プログラムでRadioButtonsを追加しています。

[〜#〜] edit [〜#〜]:問題は解決しました。 xmlのRadioButton内にRadioGroup以外のビューを追加できます。私の場合、プログラムで行うこともできますが、レイアウトパラメータには注意してください。 Akkiは正しい考えを持っていました、そしてこれは私のために働きました:

for (int i = 0; i < items.size(); i++) {
    if (i > 0) {
        // add a divider with height of 1 pixel
        View v = new View(this);
        v.setLayoutParams(new RadioGroup.LayoutParams(LayoutParams.MATCH_PARENT, 1));
        v.setBackgroundColor(Android.R.color.darker_gray);
        mRadioGroup.addView(v);
    }
    RadioButton rb = new RadioButton(this);
    /* set other properties ... */

    mRadioGroup.addView(rb);
}
21
Karakuri
<RadioGroup
    Android:id="@+id/location_radio_group"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:divider="?android:attr/dividerHorizontal"
    Android:showDividers="middle">
</RadioGroup>

それはあなたのために働くでしょう。そして、グループビューにビューを追加する方法に本当に興味がありますか?それはclasscastexceptionを引き起こすはずです、違いますか?

22
smilingky

回避策は次のとおりです。

まず、仕切りとしてShape Drawableを作成します。次に例を示します。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:shape="rectangle" >
<solid 
    Android:color="@color/white" />
<stroke 
    Android:width="0.3dp" 
    Android:color="@color/black" />
</shape>

これは単純な黒い境界線です。それをdrawable /フォルダー内に置き、custom_divider.xmlのような名前を付けます。

次に、RadioGroupを使用するレイアウトに移動します。それぞれのRadioButton(s)の背景としてShapeDrawableを使用します。次に例を示します。

<RadioGroup
        Android:id="@+id/radioGroup1"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginTop="10dp"
        Android:divider="@color/black" >

        <RadioButton
            Android:id="@+id/radio0"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:background="@drawable/custom_radiogroup_divider"
            Android:checked="true"
            Android:text="RadioButton" />

        <RadioButton
            Android:id="@+id/radio1"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:background="@drawable/custom_radiogroup_divider"
            Android:text="RadioButton" />

        <RadioButton
            Android:id="@+id/radio2"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content"
            Android:background="@drawable/custom_radiogroup_divider"
            Android:text="RadioButton" />

    </RadioGroup>

RadioGroupにShapeDrawableを追加することもできます。それはあなた次第です、あなたが必要ならそれをカスタマイズしてください。 :)

これは、カスタム境界線(コーナー半径)とカスタム仕切りShapeDrawableを使用したRadioGroupの例です。 RadioGroup divider

15
KarenAnne

仕切りを表すシェイプドローアブルを作成します(「radio_group_divider」と呼ばれます)。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <size Android:width="12dp" />
    <solid Android:color="@color/transparent" />
</shape>

このドローアブルをRadioGroupの「ディバイダー」として使用します。

<RadioGroup
        ...
        Android:divider="@drawable/radio_group_divider"
        Android:showDividers="middle"
        ...>
</RadioGroup>
6
David

プログラムでRadioGroupを作成する場合は、プログラムで分周器も設定する必要があります。あなたはそのようにそれを行うことができます:

RadioGroup radioGroup = new RadioGroup(getActivity()); //We create a new radio group
radioGroup.setShowDividers(LinearLayout.SHOW_DIVIDER_MIDDLE);
radioGroup.setDividerDrawable(getResources().getDrawable(Android.R.drawable.divider_horizontal_textfield, getActivity().getTheme()));

.。

注:このコード部分はフラグメントで機能しています。したがって、それをアクティビティに入れたい場合は、「getActivity()」を「YourActivityName.this」に変更して変更する必要があります。

0