Как показать тень панели действий и панели инструментов библиотеки поддержки на всех версиях Android?

Это простой вопрос:

Я использую новую библиотеку поддержки, которая позволяет мне иметь экземпляр панели инструментов и даже установить его как actionBar действия (или использовать по умолчанию).

Как настроить тень, отбрасываемую панелью инструментов (или панелью действий по умолчанию)?

Я пытался использовать "setElevation" (на обоих), но на Android Lollipop это не помогло.

Кроме того, я не могу найти, как настроить тень на версиях до Lollipop. Есть ли API для этого? или, по крайней мере, рисовать (я не нашел, хотя я пытался)?

Хорошо, мне удалось найти следующие вещи:

Как для Lollipop, так и для pre-Lollipop, когда ваша деятельность использует обычные темы AppCompat (например, «Theme.AppCompat.Light»), тень должна выглядеть хорошо.

Однако, когда вы используете «setSupportActionBar» (и используете соответствующую тему, например «Theme.AppCompat.Light.NoActionBar»), у вас будут некоторые проблемы с тенью.

Для pre-Lollipop вы можете поместить FrameLayout под панелью инструментов, которая будет выглядеть точно так же, как и для обычных тем:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:foreground="?android:windowContentOverlay"
        android:visibility="@integer/action_bar_shadow_background_visibility" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:text="@string/hello_world" />

</RelativeLayout>

Вы можете использовать FrameLayout в качестве содержимого своей деятельности или использовать то, что я сделал. Вы также можете установить его видимость, поставив целое число 0 для предварительного леденца на палочке и 2 для леденца на палочке и выше, как я сделал с «action_bar_shadow_background_visibility».

Это уродливое решение, но оно работает, но только для версий до Lollipop.

В любом случае, я все еще не мог найти способ хорошо показать тень для Lollipop, в случае, если я использую "setSupportActionBar". Я попытался использовать "setElevation" на панели инструментов и панели действий (используя "getSupportActionBar", сразу после вызова "setSupportActionBar").

Я также не понимаю, как получить стандартную высоту панели действий, так как я заметил, что во многих руководствах говорится, что для панели инструментов используется minHeight. Был бы признателен за помощь для этого тоже.

Кто-нибудь может мне с этим помочь?

Опять же, чтобы было понятно, вот что я спрашиваю:

для Pre-Lollipop покажите ту же тень, что и в библиотеке поддержки для Панели инструментов и Панели действий.То же самое для Lollipop (но используйте тот, который есть у Lollipop)Дополнительно: настройте тень, чтобы она была более «нежной» на Lollipop (и, возможно, настройте ее во всех версиях).Дополнительно: почему minHeight панели инструментов получает значение высоты панели действий вместо самой высоты?

РЕДАКТИРОВАТЬ: ОК, это все, что я сделал, чтобы имитировать тень Lollipop:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:minHeight="?attr/actionBarSize"
        app:theme="@style/ThemeOverlay.AppCompat.ActionBar" />

    <include
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        layout="@layout/toolbar_action_bar_shadow" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:text="@string/hello_world" />

</RelativeLayout>

разреш / макет / toolbar_action_bar_shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:foreground="?android:windowContentOverlay" />

разреш / макет-V21 / toolbar_action_bar_shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/msl__action_bar_shadow" />

RES / вытяжке-V21 / RES / макет / msl__action_bar_shadow.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- intended for lollipop and above -->

    <item>
        <shape
            android:dither="true"
            android:shape="rectangle" >
            <gradient
                android:angle="270"
                android:endColor="#00000000"
                android:startColor="#33000000" />

            <size android:height="10dp" />
        </shape>
    </item>

</layer-list>

Это не совсем то же самое, но это похоже.

РЕДАКТИРОВАТЬ: Я до сих пор не знаю, почему это происходит. Я думаю, что код, который я написал по этому вопросу, вводит в заблуждение, поскольку все, что нужно сделать, это установить фон. Тем не менее, в приложении, которое я тестирую, оно все равно не помогает. Приложение, которое я пытаюсь исправить, имеет панель инструментов над панелью навигации.

На мгновение я подумал, что это может быть из-за того, что я создал настраиваемую панель инструментов (которая выходит из панели инструментов) и которая меняет свое альфа-значение (в соответствии с панелью навигации), но даже если я использую обычную панель инструментов и отключаю все, что связано к альфе, это все еще не работает. Кроме того, не только это, но и в совершенно новом проекте, я попытался установить полупрозрачный фон для панели инструментов, и он получил тень в соответствии с методом setElevation.

Теперь мне еще сложнее найти причину этой проблемы, потому что кажется, что это не из-за прозрачности и не из-за пользовательского класса панели инструментов ...

Вот макет действия, который имеет панель инструментов, на случай, если это может помочь каким-либо образом:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:app="http://schemas.android.com/apk/res-auto"
    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.support.v4.widget.DrawerLayout
        android:id="@+id/activity_main__drawerLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <FrameLayout
            android:id="@+id/activity_main__fragmentContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <include
            android:layout_width="240dp"
            android:layout_height="match_parent"
            android:layout_gravity="left"
            android:layout_marginTop="?attr/actionBarSize"
            layout="@layout/activity_main__sliding_menu" />
    </android.support.v4.widget.DrawerLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <com.app.ui.Toolbar
            android:id="@+id/activity_main__toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="?attr/colorPrimary"
            android:layoutDirection="ltr"
            android:minHeight="?attr/actionBarSize"
            app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
            tools:ignore="UnusedAttribute" />

        <!-- <include -->
        <!-- android:layout_width="match_parent" -->
        <!-- android:layout_height="wrap_content" -->
        <!-- layout="@layout/toolbar_action_bar_shadow" /> -->
    </LinearLayout>

</FrameLayout>

Ответы на вопрос(2)

Ваш ответ на вопрос