Представьте, что у вас был следующий дизайн для карты, которую вы будете использовать через приложение. Заголовок, кнопка, разделитель, а затем место для динамического содержимого c, обозначенного синим прямоугольником. Мы можем добавить все, что нам нужно, в синюю область, но рамка для содержания будет согласованной. Например:
Карта с регистром-заполнителем
Если я собираюсь поместить две TextView
внутри, это может выглядеть так, с видом (обрезанным) компоновка ниже:
Карта с двумя TextViews
<com.google.android.material.card.MaterialCardView>
<LinearLayout android:orientation="vertical">
<LinearLayout android:orientation="horizontal">
<TextView android:text="My Title" />
<com.google.android.material.button.MaterialButton android:text="ACTION" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="#000" />
<LinearLayout android:id="+@id/contentGoesHere">
<TextView android:text="First element" />
<TextView android:text="Second element" />
</LinearLayout>
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
В идеале я хотел бы, чтобы пользовательский вид так, чтобы разработчики могли просто делать следующее и получать последовательную информацию, или добавьте к представлению программно:
<com.customview.CustomView>
<TextView android:text="First element" />
<TextView android:text="Second element" />
</com.customview.CustomView>
Моя проблема в том, что просто расширение LinearLayout
и создание пользовательского представления не будут работать - это создаст макет, но нет никакого способа указать, что внутренний LinearLayout
это то, к чему я хочу добавить представления, поэтому все подпредставления, добавленные в XML, игнорируются.
Нужно ли создавать пользовательский ViewGroup
и вручную раздувать пользовательский держатель для * 1023? * (помогите! onMeasure и onLayout !?) или есть более простой способ сделать пользовательский LinearLayout
вид с помощью этой стилизованной рамки вокруг него?