在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>
答案 0 :(得分:31)
问题出现在Android 5.0的elevation
属性中。显然,RelativeLayout
Z轴排序与elevation
相关联。如果两个窗口小部件具有相同的elevation
,则RelativeLayout
将确定Z轴顺序 - 您可以看到,如果要将布局切换为两个Button
窗口小部件,例如。但是,如果一个窗口小部件(Button
)具有elevation
,而另一个窗口小部件(ImageView
)没有,则elevation
将优先。
您可以通过Button
或defining 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>
像CommonsWare解释的那样,将ImageView的translationZ设置为高于Button值会得到预期的结果。