我可以从左到右更改单选按钮的位置吗?我的意思是绿色选择按钮将在右侧,文本在其左侧。可能吗?(默认按钮左,文本右)
2 回答
应该可以使用 getCompoundDrawables() 和 setCompoundDrawables() 重新排列文本周围的可绘制对象。
更进一步,也许您可以基于 CheckBox 实现您自己的 CheckBoxRight 小部件,该小部件在调用 super.onDraw() 后在 onDraw() 方法中实现。
最后一种选择是直接从 TextView 构建您自己的小部件,并在维护来自 onClick() 事件处理程序的内部状态后适当地 setCompoundDrawables() 。
单选按钮不像您(或几乎任何人)想要的那样灵活。您可以构建自己的自定义小部件,如果您不熟悉这样做可能会令人生畏。或者你可以做我最喜欢的解决方法。
像处理常规按钮一样处理 RadioButton——不要使用 RadioGroup 功能。现在您必须手动控制检查。通过消除 RadioGroup,您可以随意创建布局。
这是一个示例 xml 布局,它在 TableLayout 中使用 RadioButtons,每个按钮的左侧都有文本,右侧有一个图像:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TableRow
android:id="@+id/row_1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button 1" />
<RadioButton
android:id="@+id/rb_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pretty_pic_1" />
</TableRow>
<TableRow
android:id="@+id/row_2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button 2" />
<RadioButton
android:id="@+id/rb_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pretty_pic_3" />
</TableRow>
<TableRow
android:id="@+id/row_3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="true" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button 3" />
<RadioButton
android:id="@+id/rb_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/pretty_pic_3" />
</TableRow>
</TableLayout>
但你还没有完成。您现在必须手动处理您的单选按钮。我喜欢这样做:
class FooActivity extends Activity {
RadioButton m_rb1, m_rb2;
TableRow m_row1, m_row2;
@Override
protected void onCreate(Bundle savedInstanceState) {
m_rb1 = (RadioButton) findViewById(R.id.rb1);
m_rb2 = (RadioButton) findViewById(R.id.rb2);
m_row1 = (TableRow) findViewById(R.id.row_1);
m_row1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
m_rb1.setChecked(true);
m_rb2.setChecked(false);
}
});
m_row2 = (TableRow) findViewById(R.id.row_2);
m_row2.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
m_rb1.setChecked(false);
m_rb2.setChecked(true);
}
});
}
}
请注意,我希望用户通过选择文本、图片或按钮本身来选择 RadioButton。所以我把整个 TableRows 做成了可点击的对象。
希望这可以帮助!