web-dev-qa-db-fra.com

Impossible de faire fonctionner l'attribut clipChildren = false

J'ai un RelativeLayoutjaune contenant un plus grand LinearLayoutrouge.

Afin de rendre l'ensemble LinearLayoutvisible, j'ai défini Android:clipChildren="false", mais cela ne fonctionne pas comme prévu:

<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>
  • avec Android:clipChildren="true":

enter image description here

avec le LinearLayoutrouge coupé comme prévu

  • avec Android:clipChildren="false":

enter image description here

où la hauteur LinearLayoutest découpée et la largeur définie dans la présentation n'est pas respectée.

Qu'est-ce qui ne va pas?

MODIFIER

Si j'emballe le conteneur dans un LinearLayoutavec les deux dimensions correspondant à son parent, j'obtiens le même résultat (j'ai vérifié que le conteneur du conteneur LinearLayout remplissait tout l'écran). 

<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

Si je mets l'attribut Android:clipChildren="false" dans le parent LinearLayout, j'obtiens ce qui suit:

enter image description here

22
jul

Aussi mis 

Android:clipToPadding="false"

À côté de:

Android:clipChildren="false"
22
Morteza Rastgoo

Android:clipChildren="false" permet à chaque enfant de dessiner en dehors de ses propres limites, dans le parent. Il ne permet pas aux enfants de dessiner en dehors du parent lui-même. Pour cela, vous devez définir Android:clipChildren="false" sur le grand-parent (également).

Je pense que ce que vous voyez avec les couleurs, c'est simplement parce que les couleurs n'ont pas de limites inhérentes. S'il n'y a rien qui les coupe, les couleurs disparaissent pour toujours. Ma théorie est que si vous utilisiez, par exemple, une image étirée de 1x1 px au lieu d'une couleur, les choses seraient différentes.

62
Karu

Une astuce permettant de résoudre votre problème consiste à ajouter une vue réservée.

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

dans la mise en page relative et boum!

Explication

Pour moi, la limite de la mise en page relative semble être différente de la hauteur. La limite semble être celle où se termine le contenu ou le parent. Ajouter un peu de vue au bas de la fenêtre définit l’affichage en bas pour que tout fonctionne correctement.

0
Arifullah Jan