У меня есть собственное представление, которое расширяет класс вида. Я бы хотел, чтобы два экземпляра моего пользовательского представления накладывались друг на друга непосредственно друг над другом. Как должен выглядеть файл макета для этого?
Как просмотреть слои
Ответ 1
Оказывается, FrameLayout был тем, что я хотел. Просто сделайте это в своем макете:
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<com.proj.MyView
android:id="@+id/board1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<com.proj.MyView
android:id="@+id/board2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</FrameLayout>
Ответ 2
Используйте RelativeLayout. Позже дети RelativeLayout будут перекрывать ранние дети.
Ответ 3
Хотя верно, что вы можете достичь слоев с использованием RelativeLayout и FrameLayout, в API 21 и выше.. все изменилось.
В API 21 и выше более поздние дети из xml не означают, что они перекрывают ранние дети. Вместо этого он использует Elevation, чтобы определить, какой вид будет перекрывать другой вид (Z-Index).
Например, если у вас есть что-то вроде этого.
<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:text="Hello World"
android:layout_gravity="top" />
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@android:color/black"
android:layout_gravity="bottom" />
</FrameLayout>
View не будет отображаться, даже если он был добавлен после Button. Это потому, что Button имеет более высокую высоту, чем View. Чтобы изменить Z-Index, вы можете добавить атрибут Elevation к соответствующим представлениям.
<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:text="Hello World"
android:layout_gravity="top"
android:elevation="0dp" />
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@android:color/black"
android:layout_gravity="bottom"
android:elevation="2dp" />
</FrameLayout>
Таким образом, View будет перекрывать Button.
Дополнительная информация о Высота и тени: https://material.io/guidelines/material-design/elevation-shadows.html