選択/選択解除時にラジオボタンの背景色/形状を変更する方法

コナーS:

私は、forループでRADIOGROUPにプログラム的にラジオボタンを追加しています。私がチェックされていないときに私のボタンが特定の背景色を持つようにしたい、そしてそれらがチェックされたときに別の(一つだけが一度に選択することができます)。私の問題は、私はまた、このような背景が丸い長方形になりたいということです。私はそれが部分的に働いていますが、私は答えを選択したときに、それが白にそのボタンの背景を設定しますが、それは他のボタンのいずれかをリセットされません。

私はラジオグループから期待されているトグル動作を追加するために、セレクタオブジェクトのいくつかの種類が必要であることを理解しています。私はそれのいくつかの例を見つけることができたが、彼らは唯一の背景として単色を設定する方法を示しました。私は、この丸みを帯びた角の形状を使用する必要があります。だから、私の悩みは、二つをブレンドする方法を考え出すされています。私は完全に間違ってこのついて行くことができます。私が欲しいものを達成するためのより良い方法があれば、私は私はすでに試したどのようなものではなく、サルベージを使用することを好むだろう。

私は、2つのXMLファイルを作成することにより、近い形状のオブジェクトと、独自の背景色でそれぞれを得ることができました。ラジオボタンを選択した場合、そのスタイルはスタイル。しかし、私は他にチェックボタンをオフに切り替えていないので、私はこの間違ったに近づいています知っている「radio_button_checkedに設定されます。私は基本的にすべてのボタンをクリックすると、それらすべてが白持って取得することができます背景。私はこれを行うには良い方法があると知って、私はちょうどそれが何であるかわかりません

ここで私はラジオグループRGのための変更リスナーと一緒に、ボタンを追加するループがある(RGは私のRADIOGROUPと回答は、文字列のちょうどHashMapのである。彼らは、この問題に関連したものには影響しません。buttonTintListラインにただそこにあります変更サークル色)

for(int i = 0; i < answers.size(); i++)
    {
        RadioButton rb = new RadioButton(context);
        rb.setTextColor(ContextCompat.getColor(context, R.color.colorPrimaryDark));


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            rb.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor( context, R.color.colorAccent)));
        }
        rb.setBackground(context.getResources().getDrawable(R.drawable.radiobutton_style_unchecked));
        rb.setText(answers.get(i));
        rb.setWidth(800);
        rb.setHeight(150);
        rb.setTextSize(18);
        rb.setLayoutParams(params);
        rg.addView(rb);
    }
    /*  Store the answer */
    rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            RadioButton rb= (RadioButton)group.findViewById(checkedId);
            answer = rb.getText().toString();

            rb.setBackground(context.getResources().getDrawable(R.drawable.radiobutton_style_checked));

        }
    });

ここに未チェックのボタンのためのXML(radiobutton_style_unchecked.xml)があります

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
<corners android:radius="6dp" />
<gradient
    android:angle="45"
    android:centerColor="@color/colorPrimaryLight"
    android:centerX="35%"
    android:endColor="@color/colorPrimaryLight"
    android:startColor="@color/colorPrimaryLight"
    android:type="linear" />

<padding
    android:bottom="5dp"
    android:left="0dp"
    android:right="0dp"
    android:top="5dp" />


</shape>

確認ボタンのスタイルはまったく同じですが、白の代わりcolorPrimaryLightと

ここでは何も選択されていないと次のようになります。 1

ここでは、それは一つのアイテムが選択されたときにどのように見えるかです。 2

そして、これは私が複数を選択するときに起こることです 3

Nilesh Rathod:

これを試して

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_blue_light"
    android:orientation="vertical">

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="@drawable/radio_background"
            android:padding="10dp"
            android:text="Yes" />

        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="@drawable/radio_background"
            android:padding="10dp"
            android:text="No" />

    </RadioGroup>

</LinearLayout>

@描画可能/ radio_background

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" android:state_checked="true" />
    <item android:drawable="@color/colorAccent" android:state_checked="false" />
</selector>

出力

ここでは、画像の説明を入力します。

更新

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/holo_blue_light"
    android:orientation="vertical">

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="@drawable/test"
            android:padding="10dp"
            android:text="Yes" />

        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:background="@drawable/test"
            android:padding="10dp"
            android:text="No" />

    </RadioGroup>

</LinearLayout>

描画可能/テスト@

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:exitFadeDuration="@android:integer/config_shortAnimTime">

    <item android:drawable="@drawable/radio_selected" android:state_checked="true" />
    <item android:drawable="@drawable/radio_normal" />

</selector>

@描画可能/ radio_selected

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="20dp" />
    <solid android:color="@android:color/white" />
    <padding
        android:bottom="5dp"
        android:left="0dp"
        android:right="0dp"
        android:top="5dp" />


</shape>

@描画可能/ radio_normal

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="20dp" />
    <solid android:color="@color/colorAccent" />
    <padding
        android:bottom="5dp"
        android:left="0dp"
        android:right="0dp"
        android:top="5dp" />

</shape>

出力

ここでは、画像の説明を入力します。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=192137&siteId=1