2017-09-30 2 views
1

In meinem Code unten habe ich eine weiße Ansicht mit einer Höhe von 8dp. Der blaue Knopf hat eine Höhe von 10dp, also sollte es in der Theorie zeigen. Allerdings nicht. Es zeigt nur den Teil, in dem es sich nicht direkt über der weißen Ansicht befindet. Ich weiß, es ist etwas mit der Höhe, aber ich weiß nicht genau was. Ich habe herausgefunden, dass es in Ordnung ist, wenn die weiße Ansicht = < 2 ist, aber sobald ich es höher setze, tritt das Problem auf.Höhe über 2dp bewirkt, dass Schaltflächen verschwinden

enter image description here

Hier ist mein Code:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <View 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/login_background" 
      android:background="@color/colorPrimary" /> 

     <View 
      android:id="@+id/view" 
      android:layout_width="@dimen/login_container_width" 
      android:layout_height="@dimen/login_container_height" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="@dimen/login_container_margin_top" 
      android:background="@drawable/login_container" 
      android:elevation="8dp"> 

     </View> 

     <Button 
      android:id="@+id/button" 
      android:layout_width="190dp" 
      android:layout_height="50dp" 
      android:layout_marginBottom="52dp" 
      android:background="@drawable/login_button" 
      android:elevation="10dp" 
      android:text="LOGIN" 
      android:textColor="@color/white" 
      android:textSize="20sp" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" /> 

    </RelativeLayout> 

</LinearLayout> 
+0

Werfen Sie einen Blick auf [diese Frage] (https://stackoverflow.com/questions/27080338/android-5-0-androilevation-works-for-view-but-not-button) und die angenommene Antwort zu sehen wenn es deine Frage beantwortet. – Cheticamp

+0

Ich habe versucht, was die angenommene Antwort sagte, aber es hat nicht funktioniert. Nichts hat sich geändert. –

Antwort

0

Im Folgenden spiegelt this Stack-Überlauf Frage und die Antwort akzeptiert.

Betrachten wir, was Sie anfangen mit. Ich habe keinen Zugriff auf all deine Dimensionen, um das Folgende genau wie dein Beispiel aussehen zu lassen, aber die Basis ist da. Unten ist das Grundlayout. Sie können sehen, dass die Schaltfläche unterhalb der Ansicht liegt, obwohl die Ansicht eine Höhe von 8dp aufweist und die Schaltfläche eine Höhe von 10dp aufweist.

enter image description here

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

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/colorPrimaryDark"> 

     <View 
      android:id="@+id/view" 
      android:layout_width="match_parent" 
      android:layout_height="175dp" 
      android:layout_alignBottom="@+id/button" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentStart="true" 
      android:layout_margin="30dp" 
      android:background="@android:color/white" 
      android:elevation="8dp"> 

     </View> 

     <Button 
      android:id="@+id/button" 
      android:layout_width="190dp" 
      android:layout_height="50dp" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:layout_marginBottom="52dp" 
      android:background="@mipmap/ic_launcher" 
      android:elevation="10dp" 
      android:text="LOGIN" 
      android:textColor="@color/white" 
      android:textSize="20sp" /> 

    </RelativeLayout> 

</LinearLayout> 

Also, warum ist das? Dies liegt daran, dass android:elevation="10dp" im XML für die Schaltfläche die Höhe nicht wirklich definiert. Stattdessen wird die Höhe der Schaltfläche durch eine "StateListAnimator" gesteuert, die die Eigenschaften android: height und android: translationZ steuert. "(Siehe akzeptierte Antwort auf die oben genannte Frage.)

Wenn Sie nicht wirklich interessieren, was der StateListAnimator ist Wenn Sie das für Ihr Layout tun, können Sie es einfach eliminieren, indem Sie android:stateListAnimator="@null" zum XML für die Schaltfläche hinzufügen.Wie sieht das Layout nach dem Hinzufügen dieses Codes aus? (Bitte beachten Sie, dass der Designer die Änderungen möglicherweise nicht sofort anzeigt; Android Studio 3.0 Beta 6 Also nicht)., müssen Sie das Layout zu aktualisieren, um die Änderungen zu sehen.

enter image description here

Wie Sie sehen können, befindet sich der Button jetzt wie erwartet über der Ansicht.

Wenn Sie sich kümmern, was StateListAnimator für Sie tut, müssen Sie Ihre eigenen definieren und geben Sie ihren Namen anstelle von @null in der XML-Anweisung oben geändert. Die Antwort, die ich oben erwähnt habe, hat die StateListAnimator, die Android vermutlich verwendet, also können Sie das als eine Basis nehmen und die Erhebung ändern, was Sie bevorzugen. Ich habe das nicht versucht, aber es sollte funktionieren.

+0

Vielen Dank! Du hast es so gut erklärt, dass ich es wirklich verstehen konnte, haha. +1 für dich! –

Verwandte Themen