この RadioGroup は LinearLayout を継承していて、子要素が RadioButton でなければいけません。
そのため、TableLayout や RelativeLayout のレイアウトでは、RadioButton のスコープを設定することができません。
「ないなら、作ってしまえ」
ということで、作りました。
RadioGroup のソースを見て、ほとんどそのまま LinearLayout を TableLayout, RelativeLayout に置き換えた感じです。
■ TableRadioGroup
・ダウンロードはここから TableRadioGroup.java at github
■ RelativeRadioGroup
・ダウンロードはここから RelativeRadioGroup.java at github
■ 使い方
・TableRadioGroup
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<yanzm.products.customview.TableRadioGroup
android:id="@+id/table"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<TableRow
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio1"
/>
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio2"
/>
<RadioButton
android:id="@+id/radio3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio3"
/>
</TableRow>
<TableRow
android:id="@+id/group2"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/radio4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio4"
/>
<RadioButton
android:id="@+id/radio5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio5"
/>
<RadioButton
android:id="@+id/radio6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio6"
/>
</TableRow>
<TableRow
android:id="@+id/group3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/radio6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio7"
/>
<RadioButton
android:id="@+id/radio8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio8"
/>
<RadioButton
android:id="@+id/radio9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio9"
/>
</TableRow>
</yanzm.products.customview.TableRadioGroup>
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
public class MainActivity extends Activity {
private TextView mTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.textview);
TableRadioGroup group = (TableRadioGroup)findViewById(R.id.table);
group.setOnCheckedChangeListener(new TableRadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(TableRadioGroup group, int checkedId) {
mTextView.setText("CheckedId : " + checkedId);
}
});
}
}
・RelativeRadioGroup
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<yanzm.products.customview.RelativeRadioGroup
android:id="@+id/relative"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:text="radio1"
/>
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/radio1"
android:text="radio2"
/>
<RadioButton
android:id="@+id/radio3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/radio1"
android:layout_below="@id/radio2"
android:text="radio3"
/>
<RadioButton
android:id="@+id/radio4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/radio1"
android:layout_below="@id/radio3"
android:text="radio4"
/>
<RadioButton
android:id="@+id/radio5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/radio4"
android:layout_below="@id/radio3"
android:text="radio5"
/>
<RadioButton
android:id="@+id/radio6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/radio4"
android:layout_below="@id/radio5"
android:text="radio6"
/>
<RadioButton
android:id="@+id/radio7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/radio4"
android:layout_below="@id/radio6"
android:text="radio7"
/>
<RadioButton
android:id="@+id/radio8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="radio8"
android:layout_below="@id/radio6"
android:layout_toLeftOf="@id/radio7"
/>
<RadioButton
android:id="@+id/radio9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/radio6"
android:layout_toLeftOf="@id/radio8"
android:text="radio9"
/>
</yanzm.products.customview.RelativeRadioGroup>
<TextView
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
public class MainActivity extends Activity {
private TextView mTextView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTextView = (TextView)findViewById(R.id.textview);
RelativeRadioGroup group = (RelativeRadioGroup)findViewById(R.id.relative);
group.setOnCheckedChangeListener(new RelativeRadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RelativeRadioGroup group, int checkedId) {
mTextView.setText("CheckedId : " + checkedId);
}
});
}
}
はじめまして藤井と申します。
返信削除いきなりすみませんが
http://y-anz-m.blogspot.com/2011/03/androidtablelayout-relativelayout.html
この記事の下記リンクがうまく飛びません
「yanzm.products.customview.RelativeRadioGroup」
を使ってみたいのでよろしくお願いします。
■ TableRadioGroup
・ダウンロードはここから TableRadioGroup.java at github
■ RelativeRadioGroup
・ダウンロードはここから RelativeRadioGroup.java at github
あらら、すいません。
返信削除https://github.com/yanzm/yanzm-s-Custom-View-Project/tree/master/YanzmCustomView/src/yanzm/products/customview
からどうぞー。
いつも有益な情報ありがとうございます。
返信削除SDK r21.1で下記のLintエラーがついたのでご報告です。
YanzmCustomView/res/layout/main.xmlの4行目
> When using a custom namespace attribute in a library project, use the namespace "http://schemas.android.com/apk/res-auto"
独自名前空間を使う場合、上記の通りのURLを名前空間として使わなければならないようにいつの間にか変更されたようです。
随分たっていますが、RelativeLayout の 中にとびとびにRudioButtonを配置した時にどうしたら排他的にできるのかと困り果て、しゃあない、レイアウトをいちからやり直しするしかないかなぁ、面倒だなぁと思っておりましたが、こちらのソースを使ったところ一発でうまくいきました。うーん、さすがです。感動してしまいました。ありがとうございました。
返信削除