在lolipop之前的android版本中,以下代码有效,并且按钮前面有一个图像。但是在android 5中,imageview放在按钮后面。

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

最佳答案

问题出现在Android 5.0的elevation属性中。显然,RelativeLayout Z轴顺序绑定(bind)到elevation中。如果两个小部件都具有相同的elevation,则RelativeLayout将确定Z轴顺序-例如,您可以看到如果将布局切换为两个Button小部件。但是,如果一个窗口小部件(Button)具有elevation,而另一个窗口小部件(ImageView)没有,则elevation将优先。

您可以通过Buttondefining your own custom animator删除elevation android:stateListAnimator="@null"。或者,您可以在elevation中添加一些ImageView,以使其在Z轴上的位置比Button高。

10-07 22:46