clipChildren не работает, если вид снизу имеет фон

#android

Вопрос:

Я обнаружил странное поведение макета, когда тень вида обрезается видом снизу, если этот вид снизу имеет некоторый фон, даже если clipChildren установлено значение false, и он правильно работает в верхней части. Если я удалю фон из вида снизу или удалю FrameLayout — проблема решится. Но в данной конкретной проблеме я не могу этого сделать, потому что родительский макет имеет свой собственный фон, и эти три представления должны иметь свой собственный фон. Кроме того, я не могу переместить все три представления в один фрейм, потому что они будут отдельными элементами в переработчике.

Кто-нибудь знает, как это решить? Заранее спасибо.

Вывод изображения

Расположение:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/red"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:orientation="vertical">

    <androidx.appcompat.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:gravity="center"
        android:text="asdasdasd" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:clipChildren="false"
        android:clipToPadding="false"
        android:paddingHorizontal="24dp">

        <View
            android:layout_width="match_parent"
            android:layout_height="32dp"
            android:background="@color/white"
            android:elevation="16dp" />
    </FrameLayout>

    <androidx.appcompat.widget.AppCompatTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:gravity="center"
        android:text="asdasdasd" />
</androidx.appcompat.widget.LinearLayoutCompat>
 

Ответ №1:

Неважно. Коллега предложил добавить translationZ, поэтому проблема была устранена путем добавления android:outlineProvider=»нет» и android:translationZ=»1dp» в вывод кадров. Спасибо, Андрей!

     <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:clipChildren="false"
        android:clipToPadding="false"
        android:outlineProvider="none"
        android:paddingHorizontal="24dp"
        android:translationZ="1dp">