In android versions previous to lolipop, the following code works and an image is in front of the button. But in android 5 the imageview is put behind the button.
<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>
The problem appears Android 5.0's elevation
property. Apparently, the RelativeLayout
Z-axis ordering is tied into elevation
. If both widgets have the same elevation
, the RelativeLayout
will determine the Z-axis order -- you can see that if you were to switch your layout to be both Button
widgets, for example. However, if one widget (Button
) has an elevation
, and another widget (ImageView
) does not, the elevation
will take precedence.
You can remove the Button
elevation
via android:stateListAnimator="@null"
or by defining your own custom animator. Or, you can add some elevation
to your ImageView
to get it to be higher on the Z axis than is the Button
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With