Тень не работает при использовании панели инструментов (Lollipop appcompat-v7)
Как вы знаете, Elevation не работает на устройствах Pre-Lollipop. Из-за этого в панели приложений appcompat-v7 по умолчанию используется текстура "псевдо тени", как я ее называю, для эмуляции тени. Моя проблема в том, что мне нужно использовать пользовательскую панель инструментов. Когда я использую настраиваемую панель инструментов, этого "псевдо тени" нет. Так что он просто выглядит ровным. Любая идея, как добавить эту тень обратно? Некоторые люди говорили на других форумах, чтобы добавить FrameLayout с передним словом "android: windowContentOverlay", который каким-то образом перекрывает ToolBar. К сожалению, я не нашел никакого способа добиться этой работы. И по какой-то причине в моем тестировании "андроид: windowContentOverlay" в любом случае невидим. Не уверен, что я делаю неправильно.:/
Здесь XML-данные Layout для моей панели инструментов:
<android.support.v7.widget.Toolbar
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Вот как это выглядит с помощью AppCompat AppBar по умолчанию: http://imgur.com/0EiE1Vv
Вот как выглядит пользовательский ToolBar: http://imgur.com/GGEC6Tq
Изменить: с помощью alanv я понял, как сделать тень под панелью инструментов. Однако это не то же самое, что и по умолчанию в AppCompat. Это только слабая тень, и если я правильно помню тот же теневой ресурс, который использовался в более старых версиях. Мне очень трудно найти ресурс для стандартной панели AppCompat.
Ответы
Ответ 1
Вы поместите его под панель инструментов.
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:layout_width="match_parent"
android:layout_height="5dp"
android:background="@drawable/toolbar_shadow" />
</FrameLayout>
@вытяжке/toolbar_shadow:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<gradient
android:startColor="@android:color/transparent"
android:endColor="#88333333"
android:angle="90"/>
</shape>
Ответ 2
Я бы рекомендовал вам использовать два разных макета (один для версии 21 и один для всех остальных) и включить их в свой макет, используя:
<include layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
Пример: https://gist.github.com/P0T4T0x/fbd2151bb40d3bd635d0
Ответ 3
Чтобы показать тень под панелью инструментов, используйте AppBarLayout
, доступную в Библиотеке поддержки дизайна Google Android. Вот пример того, как его следует использовать.
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"/>
</android.support.design.widget.AppBarLayout>
Чтобы использовать библиотеку поддержки Google Android Design, введите следующую команду в файл build.gradle:
compile 'com.android.support:design:22.2.0'
Ответ 4
Я бы просто создал пользовательский тень XML с ImageView
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/shadow"
android:layout_height="@dimen/shadow_height"
android:layout_width="match_parent"
android:src="@drawable/shadow_shape"
/>
и ресурс изображения shadow_shape.xml в вашей папке:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="@color/shadow"
android:endColor="@color/transparent"
android:angle="-90" />
</shape>
Вы можете получить довольно приятные результаты по модулю @dimen/shadow_height
и @color/shadow
в соответствии с вашими потребностями (темнее @color/shadow
и чем выше вид, тем выше ваша поддельная высота). Это не родной, но очень настраиваемый.