2014-11-30 1 views
10

In Android-Versionen vor Lolipop funktioniert der folgende Code und ein Bild ist vor der Schaltfläche. Aber in Android 5 ist der Imageview hinter dem Button platziert.Wie bringt man ImageView vor Button in Android 5?

<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="match_parent" 
android:orientation="vertical" > 

<Button 
    android:id="@+id/button" 
    android:layout_width="210sp" 
    android:layout_height="210sp" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:background="@drawable/round_button" 
    android:drawablePadding="10dip" 
    android:gravity="center_vertical|center_horizontal" /> 


<ImageView 
    android:id="@+id/imageView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:contentDescription="@string/torch" 
    android:src="?attr/imageview" /> 

</RelativeLayout> 
+0

Sind diese in einem 'RelativeLayout'? – CommonsWare

+0

@CommonsWare ja sie sind in –

Antwort

20

Das Problem erscheint Android 5.0 elevation Eigenschaft. Anscheinend ist die Z-Achsen-Anordnung in elevation gebunden. Wenn beide Widgets dieselbe elevation haben, wird die RelativeLayout die Z-Achsen-Reihenfolge bestimmen - Sie können sehen, dass, wenn Sie Ihr Layout zum Beispiel beide Button Widgets sein sollten. Wenn jedoch ein Widget (Button) eine elevation hat und ein anderes Widget (ImageView) nicht, hat die elevation Vorrang.

Sie können die Buttonelevation über android:stateListAnimator="@null" oder defining your own custom animator entfernen. Sie können auch elevation zu Ihrem ImageView hinzufügen, damit er auf der Z-Achse höher liegt als der Button.

+0

nur um zu verdeutlichen, haben einige Widgets einen voreingestellten Höhenwert, der die Standardreihenfolge überschreibt? – LambergaR

+1

@LambergaR: Ich würde es mehr als: Einige Widgets haben Aspekte, die ihre Höhe beeinflussen, wie der 'stateListAnimator', der standardmäßig für einen' Button' eingerichtet ist. – CommonsWare

+1

irgendwie macht Sinn ... Kudos für das Finden der verdammten Sache :) – LambergaR

0

Knopf Erhebung und translationZ Werte werden im Rahmen definiert wie folgt:

<!-- Elevation when button is pressed --> 
<dimen name="button_elevation_material">1dp</dimen> 
<!-- Z translation to apply when button is pressed --> 
<dimen name="button_pressed_z_material">2dp</dimen> 

Source

Wie CommonsWare erklärt, stellen Sie die translationZ von Image höher als Button-Wert wird das Ergebnis geben, wie erwartet.