Android: почему текстовое представление не складывается над кнопкой в ​​FrameLayout

Почти каждая статья на тему многоуровневых виджетов приводит к FrameLayouts, которые должны складываться в соответствии с порядком появления в XML. Чтобы проверить, я поместил кнопку и TextView в xml, надеясь увидеть, что TextView перекрывает кнопку. Неважно, расположена ли кнопка до или после текстового представления, кнопка всегда находится сверху. Может ли кто-нибудь увидеть, что я делаю неправильно?

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.jdot.testloadingfragments.MainActivity">

    <Button
        android:id="@+id/btn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:text="        "
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="----------------------------------------------------------"/>


</FrameLayout>

person John Ward    schedule 10.01.2017    source источник


Ответы (2)


Добавление elevation к textView заставит его отображаться над Button

e.g

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.jdot.testloadingfragments.MainActivity">

    <Button
        android:id="@+id/btn_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:text="        "/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:elevation="2dp"
        android:text="----------------------------------------------------------"/>
</FrameLayout>

Дополнительная информация здесь: Почему макет фрейма неправильно отображает z-индекс?

person Isaac    schedule 10.01.2017
comment
Спасибо. Я избегаю возвышения, но не знал, что кнопка — это особый случай. Не имеет смысла, чтобы в AppCompat были темы, которые вынуждают вас использовать более современный уровень API для общего элемента дизайна. - person John Ward; 11.01.2017

FrameLayout идеально подходит для отображения одного элемента.

Если вы хотите отобразить несколько дочерних представлений в макете фрейма, попробуйте использовать атрибут android:layout_gravity для каждого дочернего элемента, чтобы правильно расположить их без перекрытия, и используйте высоту, если вы хотите, чтобы ваши представления перекрывали друг друга.

Для получения дополнительной информации посетите https://developer.android.com/reference/android/widget/FrameLayout.html

person Mohammed Junaid    schedule 10.01.2017
comment
Я знаю о повышении прав, но не могу ограничить свое приложение API 21+ - person John Ward; 11.01.2017
comment
Попробуйте использовать атрибут app:elevation, чтобы обойти это ограничение. - person Mohammed Junaid; 11.01.2017