在我的项目中,我有很多重复相同模式的屏幕——它基本上是一个视图容器,由带有标题、图像和特定背景的线性布局组成。为了避免多次复制和粘贴相同的序列,我想我可以创建一个复合视图,扩展 LinearLayout 并在那里定义所有“样式”,然后在我的布局中使用该组件。我遵循了howto和examples并让我的复合视图起作用。但是,我见过的所有示例都使用如下结果视图:
<com.myproject.compound.myview
...some attrs...
/>
即没有通过 XML 添加子级。我需要像这样使用它:
<com.myproject.compound.myview
...some attrs...>
<TextView
..../>
...other views...
</com.myproject.compound.myview>
由于我正在扩展 LinearLayout,因此我希望“myview”标签也能像 LinearLayout 一样工作,但由于某些原因,我放在里面的项目不会被绘制。我需要特别做些什么来绘制内部视图吗?
我扩展的 LinearLayout 非常简单,我没有重写任何方法,只是在构造函数中调用 super 并像这样膨胀布局:
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.my_compound_view, this, true);
更新:我想我会添加一个 XML 作为参考点:
<?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"
android:background="@drawable/bg"
android:padding="12dp">
<TextView
android:id="@+id/section_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#FF0000AA" />
<ImageView
android:layout_width="match_parent"
android:layout_height="2dp"
android:src="@drawable/line" />
</LinearLayout>