Подтвердить что ты не робот

Как просмотреть слои

У меня есть собственное представление, которое расширяет класс вида. Я бы хотел, чтобы два экземпляра моего пользовательского представления накладывались друг на друга непосредственно друг над другом. Как должен выглядеть файл макета для этого?

4b9b3361

Ответ 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