Тень не работает при использовании панели инструментов (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 и чем выше вид, тем выше ваша поддельная высота). Это не родной, но очень настраиваемый.