2014-11-30 2 views
10

Nelle versioni Android precedenti a lolipop, il seguente codice funziona e un'immagine è davanti al pulsante. Ma su Android 5 l'imageview è messo dietro il pulsante.Come portare ImageView davanti a 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

Questi sono all'interno di un 'RelativeLayout'? – CommonsWare

+0

@CommonsWare sì sono all'interno di –

risposta

20

Il problema appare proprietà di Android 5.0 elevation. Apparentemente, l'ordinamento dell'asse Z RelativeLayout è legato a elevation. Se entrambi i widget hanno lo stesso elevation, lo RelativeLayout determinerà l'ordine dell'asse Z - puoi vedere che se dovessi cambiare il layout in entrambi i widget Button, ad esempio. Tuttavia, se un widget (Button) ha uno elevation e un altro widget (ImageView), lo elevation avrà la precedenza.

È possibile rimuovere il Buttonelevation tramite android:stateListAnimator="@null" o defining your own custom animator. In alternativa, è possibile aggiungere elevation al numero ImageView per ottenere un valore più alto sull'asse Z rispetto a Button. valori

+0

solo per chiarire, alcuni widget hanno un valore di elevazione preimpostato che sovrascrive l'ordinamento predefinito? – LambergaR

+1

@LambergaR: Lo definirei più come segue: alcuni widget hanno aspetti che ne influenzano l'elevazione, come ad esempio 'stateListAnimator' che è impostato di default per un' Pulsante'. – CommonsWare

+1

kinda ha senso ... complimenti per trovare la dannata cosa :) – LambergaR

0

Button elevazione e translationZ sono definiti nel quadro come qui sotto:

<!-- 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

spiegato come CommonsWare, impostare il translationZ di ImageView superiore al valore Button darà il risultato come previsto.