私は、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と
ここでは何も選択されていないと次のようになります。
ここでは、それは一つのアイテムが選択されたときにどのように見えるかです。
そして、これは私が複数を選択するときに起こることです
これを試して
<?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>
出力