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

Не удается получить clipChildren = false для работы

У меня есть желтый RelativeLayout, содержащий более высокий красный LinearLayout.

Чтобы сделать видимым все LinearLayout, я установил android:clipChildren="false", но это не работает так, как ожидалось:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="44dp"
    android:background="#FFFF00"
    android:clipChildren="false" >

    <LinearLayout
        android:layout_width="50dp"
        android:layout_height="100dp"
        android:background="#FF0000"
        android:orientation="vertical" >

    </LinearLayout>

</RelativeLayout>
  • с android:clipChildren="true":

enter image description here

с красным LinearLayout обрезанным, как ожидалось

  • с android:clipChildren="false":

enter image description here

где высота LinearLayout обрезается, а ширина, заданная в макете, не соблюдается.

Что не так?

ИЗМЕНИТЬ

Если я упакую контейнер в LinearLayout с обоими измерениями, соответствующими его родительскому элементу, я получаю тот же результат (я проверил, что контейнер контейнера LinearLayout заполняет весь экран).

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="44dp"
        android:background="#FFFF00"
        android:clipChildren="false" >

        <LinearLayout
            android:layout_width="50dp"
            android:layout_height="100dp"
            android:background="#FF0000"
            android:orientation="vertical" >
        </LinearLayout>
    </RelativeLayout>

</LinearLayout>

ИЗМЕНИТЬ 2

Если я помещаю атрибут android:clipChildren="false" в родительский LinearLayout, я получаю следующее:

enter image description here

4b9b3361

Ответ 1

Также установите

android:clipToPadding="false"

Рядом:

android:clipChildren="false"

Ответ 2

android:clipChildren="false" позволяет каждому ребенку рисовать за пределами собственных границ внутри родителя. Это не позволяет детям рисовать вне самого родителя. Для этого вам нужно установить android:clipChildren="false" для дедушки и бабушки (также).

Я думаю, что вы видите цвета - это просто потому, что цвета не имеют неотъемлемых границ. Если ничего не обрезают, цвета уходят навсегда. Моя теория заключается в том, что если вы использовали, скажем, растянутое изображение 1x1 px вместо цвета, все будет по-другому.

Ответ 3

Уловка, которая может решить вашу проблему, состоит в том, чтобы добавить некоторое представление заполнителя

<View
  android:layout_width="wrap_content"
  android:layout_height="1dp"
  android:background="?android:attr/listDivider"
  android:layout_alignParentBottom="true"/>

в относительной компоновке и бум!

объяснение

Для меня граница относительного расположения, кажется, отличается от высоты. Граница, кажется, там, где заканчивается контент или где заканчивается родительский элемент. Добавление некоторого вида внизу устанавливает динамику внизу, чтобы все работало нормально.