В моем проекте есть экраны, на которых часто повторяется один и тот же шаблон — это в основном контейнер для представлений, состоящий из линейного макета с заголовком, изображением и определенным фоном. Чтобы избежать многократного копирования и вставки одной и той же последовательности, я подумал, что могу создать составное представление, расширить 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>