私のプロジェクトでは、同じパターンが何度も繰り返される画面があります。これは基本的に、見出し、画像、および特定の背景を持つ線形レイアウトで構成されるビューのコンテナーです。同じシーケンスを何度もコピーして貼り付けるのを避けるために、複合ビューを作成し、LinearLayout を拡張してそこですべての「スタイリング」を定義し、レイアウトでそのコンポーネントを使用するだけでよいと考えました。ハウツーと例に従って、複合ビューを機能させました。ただし、私が見たすべての例では、結果のビューを次のように使用しています。
<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>