2016-02-27 1 views
1

J'ai la disposition suivante (ici est présenté plus simple conception):Pourquoi FrameLayout ne définit pas correctement la commande Z dans ma mise en page?

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:showIn="@layout/activity_main"> 
    <FrameLayout 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" 
     > 
     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Hey, badge!" 
      android:layout_margin="10dp" 
      /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="AAAAA" 
      android:layout_margin="10dp" 
      android:textSize="12sp" 
      android:background="#ff00ff" 
      android:padding="10dp" 
      android:layout_gravity="top|end" 
      /> 
    </FrameLayout> 
</RelativeLayout> 

Je souhaite mettre TextView avec le texte « AAAA » d'agir comme un badge Button, à savoir être placé sur le bouton dans sa coin supérieur droit, ce qui n'est pas le cas.

Au lieu de cela, lorsque je tente ce code sur HTC One M7 avec Lollipop, ou sur Genymotion Nexus 6 avec Lollipop, l'écran ressemble à ceci:

Screenshot of views badly placed

Lorsque je tente le même code sur Genymotion Nexus 5 avec KitKat, tout a l'air comme prévu, à savoir première vue (bouton) est montré sous badge (textview)

Quelqu'un peut-il avoir une idée de ce qui pourrait ne pas être ici?

Merci, Deveti

Répondre

4

Les elevation causes de cette question. Il a été introduit dans Lollipop et responsable de z-commander aussi. Copiez votre mise en page à layout-v21 et définissez android:elevation="0dp" pour le bouton.

+0

Il a travaillé, merci! Mais, je devais ajouter 'android: elevation =" 2dp "' pour le TextView non plus, puis le badge apparaissait. Je ne sais pas pourquoi, intéressant. –

+1

J'ai oublié de dire que si vous ne voulez pas créer plusieurs mises en page, vous pouvez définir l'élévation à partir du code avec 'View.setElevation (float)' sur lollipop ou 'ViewCompat.setElevation (float)' sur pre-lollipop. –

0

J'ai vu ce sur un autre thread quelque part, mais vous pouvez mettre cela en vos éléments:

android:stateListAnimator="@null" 

comme d'autres ont dit l'élévation du bouton dans Lolipop et jusqu'à est modifiée de sorte que ses couvrant les autres éléments.

par exemple à mon avis bouton ci-dessous je l'utilise et il montre:

<FrameLayout 
    android:id="@+id/ib_one_container" 

    android:layout_width="38dp" 
    android:layout_height="38dp" 
    android:layout_marginLeft="5.3dp" 
    android:orientation="vertical" 
    android:padding="3dp" 
    > 


    <Button 
     android:id="@+id/ib" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/white" 
     android:clickable="true" 
     android:gravity="center" 
     android:stateListAnimator="@null" 
     android:textSize="11sp" /> 


    <com.mobile.pomelo.UI.customViews.CustomDiagonalLineView 
     android:id="@+id/diagaonal" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="visible" 

     /> 


</FrameLayout>