正如标题所描述的,我试图将一个3×3单选按钮的网格分组成一个单独的无线电组。在上一个问题中,我学到,对于单选按钮对应一个单一的组,他们必须是他们将对应的无线电组的直接孩子。当我试图在一个无线电组中封装一个整个表格布局(用表格行中的单选按钮)时,我学到了这种方法。
跑进那堵墙,我试过以下:
<TableLayout android:id="@+id/table_radButtons" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/title_radGroup_buffer"> <TableRow> <RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/radGroup1"> <RadioButton android:id="@+id/rad1" android:text="Button1" android:layout_width="105px" android:layout_height="wrap_content" android:textSize="13px"></RadioButton> <RadioButton android:id="@+id/rad2" android:text="Button2" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content"></RadioButton> <RadioButton android:id="@+id/rad3" android:text="Button3" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content"></RadioButton> </RadioGroup> </TableRow> <TableRow> <RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/radGroup1"> <!-- snippet --> </TableRow> <!-- snippet ---> </TableLayout>
显然,我没有学习第一次,因为我再次撞到一堵墙。我希望在不同的表行中的单选按钮将注意到,他们是同一无线电组的一部分(给每个组相同的ID),但这没有工作。
有没有什么办法,我可以将所有这些按钮组成一个单选组,仍然保持我的3×3结构(3行,每行3个单选按钮)?
实际上,如果你像这个例子中那样子类化TableLayout并不难
/** * */ package com.codtech.android.view; import android.content.Context; import android.util.AttributeSet; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.RadioButton; import android.widget.TableLayout; import android.widget.TableRow; /** * @author diego * */ public class ToggleButtonGroupTableLayout extends TableLayout implements OnClickListener { private static final String TAG = "ToggleButtonGroupTableLayout"; private RadioButton activeRadioButton; /** * @param context */ public ToggleButtonGroupTableLayout(Context context) { super(context); // TODO Auto-generated constructor stub } /** * @param context * @param attrs */ public ToggleButtonGroupTableLayout(Context context,AttributeSet attrs) { super(context,attrs); // TODO Auto-generated constructor stub } @Override public void onClick(View v) { final RadioButton rb = (RadioButton) v; if ( activeRadioButton != null ) { activeRadioButton.setChecked(false); } rb.setChecked(true); activeRadioButton = rb; } /* (non-Javadoc) * @see android.widget.TableLayout#addView(android.view.View,int,android.view.ViewGroup.LayoutParams) */ @Override public void addView(View child,int index,android.view.ViewGroup.LayoutParams params) { super.addView(child,index,params); setChildrenOnClickListener((TableRow)child); } /* (non-Javadoc) * @see android.widget.TableLayout#addView(android.view.View,params); setChildrenOnClickListener((TableRow)child); } private void setChildrenOnClickListener(TableRow tr) { final int c = tr.getChildCount(); for (int i=0; i < c; i++) { final View v = tr.getChildAt(i); if ( v instanceof RadioButton ) { v.setOnClickListener(this); } } } public int getCheckedRadioButtonId() { if ( activeRadioButton != null ) { return activeRadioButton.getId(); } return -1; } }
并创建一个这样的布局(当然,你需要清理它,但你有想法)
<?xml version="1.0" encoding="utf-8"?> <com.codtech.android.view.ToggleButtonGroupTableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/radGroup1"> <TableRow> <RadioButton android:id="@+id/rad1" android:text="Button1" android:layout_width="105px" android:layout_height="wrap_content" android:textSize="13px" /> <RadioButton android:id="@+id/rad2" android:text="Button2" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rad3" android:text="Button3" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content" /> </TableRow> <TableRow> <RadioButton android:id="@+id/rad1" android:text="Button1" android:layout_width="105px" android:layout_height="wrap_content" android:textSize="13px" /> <RadioButton android:id="@+id/rad2" android:text="Button2" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rad3" android:text="Button3" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content" /> </TableRow> <TableRow> <RadioButton android:id="@+id/rad1" android:text="Button1" android:layout_width="105px" android:layout_height="wrap_content" android:textSize="13px" /> <RadioButton android:id="@+id/rad2" android:text="Button2" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content" /> <RadioButton android:id="@+id/rad3" android:text="Button3" android:layout_width="105px" android:textSize="13px" android:layout_height="wrap_content" /> </TableRow> </com.codtech.android.view.ToggleButtonGroupTableLayout>