Как принести ImageView перед кнопкой в android 5?
В версиях Android, предшествующих lolipop, работает следующий код, и перед кнопкой отображается изображение. Но в 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>
Ответы
Ответ 1
Появилась проблема с Android 5.0 elevation
. По-видимому, порядок RelativeLayout
Z-оси привязан к elevation
. Если оба виджета имеют одинаковый elevation
, RelativeLayout
будет определять порядок оси Z - вы можете видеть, что, если вы хотите, например, переключить макет как на виджетов Button
. Однако, если один виджет (Button
) имеет elevation
, а другой виджет (ImageView
) не имеет приоритета elevation
.
Вы можете удалить Button
elevation
через android:stateListAnimator="@null"
или определяя собственный пользовательский аниматор. Или вы можете добавить elevation
в свой ImageView
, чтобы он был выше по оси Z, чем Button
.
Ответ 2
Значения высоты и трансляции кнопок определяются в рамках, как показано ниже:
<!-- 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, установите для параметра translationZ изображения Image выше, чем значение Button, даст результат, как ожидалось.