如何在Android 5中将ImageView带到Button前面?

时间:2014-11-30 17:32:00

标签: android android-5.0-lollipop

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

2 个答案:

答案 0 :(得分:31)

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

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

答案 1 :(得分:2)

按钮高程和translationZ值在框架中定义如下:

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

像CommonsWare解释的那样,将ImageView的translationZ设置为高于Button值会得到预期的结果。