2013-04-12 2 views
20

У меня есть желтый RelativeLayout, содержащий более высокий красный цвет LinearLayout.Не удается получить clipChildren = false атрибут для работы

Для того, чтобы сделать весь 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 высота и ширина устанавливается в макете не соблюдается.

Что случилось?

EDIT

Если я обернуть контейнер в 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> 

EDIT 2

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

enter image description here

+0

относительная компоновка имеет андроида: layout_height = "44dp". он сам зашифрован его родителем – njzk2

+0

Я установил этот макет непосредственно с помощью setContentView (R.layout.test) ;. Явного родителя нет. Не заполняет ли root ViewGroup весь экран? И почему изменяется ширина LinearLayout? – jul

+0

@ njzk2: для того, чтобы сделать больше тестов, я попробовал другой макет, и он все еще не работает (см. Мое редактирование) – jul

ответ

13

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

android:clipToPadding="false" 

Рядом:

android:clipChildren="false" 
46

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

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

Смежные вопросы