【发布时间】:2012-02-15 22:43:11
【问题描述】:
我正在尝试在 Android 布局中创建 RadioGroup,其中子 RadioButtons 被拉伸以均匀填充 RadioGroup 的整个宽度。但是,我在尝试使用 RadioButtons 执行此操作时遇到了一些意外行为,这些行为是从代码中以编程方式添加的。首先是一些背景...
做什么工作
我从一个基于RelativeLayout 的简单布局开始,它在底部包含一个大的TextView 和一个RadioGroup。
main.xml 布局文件如下所示:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView android:text="Some text"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentTop="true"
android:layout_above="@+id/radio_group"
android:gravity="center"
android:background="@android:color/holo_green_dark"
/>
<RadioGroup android:id="@+id/radio_group"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:background="@android:color/holo_blue_dark">
<RadioButton android:text="Option 1"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1"
android:background="@android:color/darker_gray"
android:button="@android:color/transparent"
android:padding="10dp"
android:gravity="center"
android:layout_margin="2dp"/>
<RadioButton android:text="Option 2"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1"
android:background="@android:color/darker_gray"
android:button="@android:color/transparent"
android:padding="10dp"
android:gravity="center"
android:layout_margin="2dp"/>
</RadioGroup>
</RelativeLayout>
在运行时产生以下布局:
您可以看到android:layout_width="wrap_content" 和android:layout_weight="1" 在RadioButtons 中的使用会拉伸它们以均匀地填充封闭RadioGroup 的一半。到目前为止一切顺利。
什么不起作用
但是,我的要求是在运行时基于业务逻辑在此布局中动态创建RadioButtons,而不是始终使用布局中静态包含的两个按钮 - 有时我可能需要两个按钮,有时是四个按钮,等等。
为了实现这一点,我从 main.xml 布局中删除了 RadioButtons:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView android:text="Some text"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentTop="true"
android:layout_above="@+id/radio_group"
android:gravity="center"
android:background="@android:color/holo_green_dark"
/>
<RadioGroup android:id="@+id/radio_group"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_alignParentBottom="true"
android:orientation="horizontal"
android:background="@android:color/holo_blue_dark"/>
</RelativeLayout>
...并为我的RadioButton 创建了一个单独的 _radio_button.xml_ 布局:
<?xml version="1.0" encoding="utf-8"?>
<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="2dp"
android:layout_weight="1"
android:background="@android:color/darker_gray"
android:button="@android:color/transparent"
android:gravity="center"
android:padding="10dp" />
在我的活动中,我现在以编程方式添加RadioButtons:
public class TestRadioActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Create an inflater to inflate our buttons
LayoutInflater inflater =
(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Create the layout params for our buttons
LinearLayout.LayoutParams layoutParams = new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f);
RadioGroup group = (RadioGroup) findViewById(R.id.radio_group);
// Add button one
RadioButton button = (RadioButton) inflater.inflate(R.layout.radio_button, null);
button.setText("Option 1");
group.addView(button, layoutParams);
// Add button two
button = (RadioButton) inflater.inflate(R.layout.radio_button, null);
button.setText("Option 2");
group.addView(button, layoutParams);
}
}
注意 _radio_button.xml_ 文件和活动如何指定 WRAP_CONTENT 的布局宽度和 1 的布局权重,以便像在原始 main.xml 中一样均匀分布按钮。
但是,布局似乎被渲染忽略了布局权重,按钮位于单选组的左侧:
正如其他地方所建议的那样,我还尝试将LayoutParams 中的RadioButtons 的宽度设置为0(显然这会导致对布局权重的解释略有不同),但这会导致RadioButton s 甚至没有被渲染:
如果以编程方式添加RadioButtons,是否可以建议如何均匀填充包含RadioGroup 的整个宽度?我有什么明显的遗漏吗?
【问题讨论】:
标签: android user-interface android-widget android-listview