假设我想要一个包含2个复选框的自定义视图。我会开始创建一个这样的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox" />
<CheckBox
android:id="@+id/checkBox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox" />
</LinearLayout>
然后创建一个扩展FrameLayout的View,使用layout-inflator添加布局:
mInflate.inflate(R.layout.foo, this, true);
我对这种方法的问题是我正在嵌套2个布局,只是为了拥有一个带有2个复选框的非常基本的视图。由于我目前正在开发一个非常复杂的布局,我正在寻找一种方法来避免在使用布局充气器时不必要的布局嵌套。
答案 0 :(得分:1)
动态创建CheckBox:
CheckBox checkBox1 = new CheckBox(this); // or getActivity() depending on code context
CheckBox checkBox2 = new CheckBox(this);
checkBox1.setText("CheckBox");
etc.
frameLayout.addView(child1);
frameLayout.addView(child2);
答案 1 :(得分:1)
您可以在xml布局中使用merge
标记,然后对其进行充气:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<CheckBox
android:id="@+id/checkBox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox" />
<CheckBox
android:id="@+id/checkBox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="CheckBox" />
</merge>
FrameLayout
可能不是您布局的最佳解决方案,因为它会将视图叠加在另一个上面。