Высота над AppBarLayout не работает
Когда я пытаюсь установить конкретное значение высоты для AppBarLayout, тень полностью исчезает.
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="4dp">
<!-- Toolbar -->
<android.support.v7.widget.Toolbar...
<!-- Other Layouts -->
</android.support.design.widget.AppBarLayout>
Это ошибка или ожидаемое поведение?
Я использую версию 26.0.0 библиотеки дизайна.
4 ответа
Настройка Property Animation
Создание анимации с 1 мс времени выполнения:/animator/appbar_elevation.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<objectAnimator
android:duration="1"
android:propertyName="elevation"
android:valueTo="2dp"
android:valueType="floatType" />
</item>
</selector>
Установка его в AppBarLayout
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stateListAnimator="@animator/appbar_elevation">
</android.support.design.widget.AppBarLayout>
И это можно использовать в коде Java.
appBarLayout.setStateListAnimator(AnimatorInflater.loadStateListAnimator(getContext(), R.animator.appbar_elevation));
Принятый ответ дает мне рак, зачем решать недостающую высоту, добавляя анимацию? Может быть, это приносит желаемый результат, и некоторые скажут: «Если это работает, то работает», но даже полупрофессиональный разработчик может заметить нехватку качества кода.
Для тех, кто спотыкается об этой проблеме, используйте более профессиональное решение!
Обычно у вас есть макет оболочки для вашего , туда вам нужно добавить
android:clipChildren="false"
. Это позволит вывести тень за границы
AppBarLayout
. В вашем включенном
Toolbar
затем вы просто устанавливаете желаемую высоту.
Минимальный пример:
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:clipChildren="false">
<com.google.android.material.appbar.AppBarLayout>
<androidx.appcompat.widget.Toolbar
android:elevation="8dp" />
</com.google.android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Работа для меня:
ViewCompat.setElevation(appBarLayout, getResources().getDimension(R.dimen.toolbar_elevation));
В моем случае добавление
translationZ
помогло:
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true"
android:background="@color/yellow_note"
android:translationZ="4dp"
android:elevation="4dp">
<com.google.android.material.appbar.CollapsingToolbarLayout
...>
<androidx.appcompat.widget.Toolbar
.../>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>