Material Design – панель инструментов AppCompat, не отображающая тень

Я использую панель инструментов из AppCompat V7 для замены предыдущей панели действий и хочу иметь тень панели инструментов, как предыдущая панель действий. Но панель инструментов по умолчанию не имеет тени, и я испробовал исправления, упомянутые в reddit . Но без везения.

Код для установки тени:

mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

Макет панели инструментов:

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" android:minHeight="?attr/actionBarSize" android:background="#F1F1F1" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="0dp" android:layout_margin="0dp" foreground="?android:windowContentOverlay"> 

Макет деятельности:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity" android:layout_width="match_parent" android:id="@+id/drawer_layout" android:layout_height="match_parent"> <!-- activity view --> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <include android:id="@+id/toolbar" layout="@layout/toolbar" /> <FrameLayout android:id="@+id/fragment_container" android:layout_below="@id/toolbar" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> <!-- navigation drawer --> <RelativeLayout android:id="@+id/left_drawer" android:layout_gravity="start" android:layout_width="match_parent" android:background="#fff" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingLeft="16dp" android:paddingRight="16dp" android:paddingTop="8dp" android:paddingBottom="8dp" android:divider="#eee" android:background="#EEE" android:id="@+id/drawer_header"> <ImageView android:id="@+id/user_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="top" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:contentDescription="@string/user_icon" android:src="@drawable/ic_action_person" android:paddingTop="0dp" android:paddingLeft="0dp"/> <TextView android:id="@+id/userName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/user_icon" android:gravity="center" android:layout_gravity="center_vertical" android:layout_centerVertical="true" android:textSize="14sp" android:text="@string/not_logged_in" android:paddingTop="0dp" android:paddingBottom="0dp"/> </RelativeLayout> <ListView android:id="@+id/drawer_list" android:layout_below="@+id/drawer_header" android:layout_width="match_parent" android:layout_height="wrap_content" android:divider="#eee" android:background="#fff" android:dividerHeight="0dp" /> </RelativeLayout> </android.support.v4.widget.DrawerLayout> 

Установка в style.xml:

 <style name="myAppTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/primaryColor</item> <item name="colorPrimaryDark">@color/primaryColorDark</item> <item name="android:windowNoTitle">true</item> <item name="windowActionBar">false</item> <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> <item name="android:windowContentOverlay">@drawable/drawer_shadow</item> </style> <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> <item name="spinBars">true</item> <item name="color">@android:color/black</item> </style> 

Может ли кто-нибудь помочь?

благодаря!

Update 1: с предложением Уиллиса, я получаю тень, но она не находится под панелью инструментов, а находится слева от панели инструментов. Введите описание изображения здесь

Обновление 2: я заметил, что если я не установлю windowContentOverlay в toolbar.xml и styles.xml, тень на самом деле находится в верхней части панели инструментов. Введите описание изображения здесь

Эти двое совершенно разные тени. Вертикальный – это DrawerLayout . Он должен появляться рядом с выдвинутым ящиком. Горизонтальная часть является частью windowContentOverlay на API ниже LOLLIPOP (на LOLLIPOP это @null ).

Когда вы работаете с Toolbar панели инструментов, панель инструментов больше не является частью декора окна, поэтому тень начинается в верхней части окна над панелью инструментов, а не ниже (так что вы хотите, чтобы windowContentOverlay был @null ). Кроме того, вам нужно добавить дополнительный пустой View под панелью инструментов pre- LOLLIPOP с фоном, установленным на вертикальную теневую растяжку (лучше всего работает градиент 8dp от #20000000 до #00000000 ). На LOLLIPOP вы можете установить высоту 8dp на панели инструментов.

Примечание. Для достижения наилучших результатов используйте тот же градиент, но горизонтальный, как тень ящика.

Вы можете установить величину тени с помощью метода setElevation . Например:

 getSupportActionBar().setElevation(25); 

Увеличение / уменьшение значения, переданного setElevation приведет к увеличению / уменьшению присутствия эффекта тени.

Чтобы показать тень под панелью инструментов, используйте AppBarLayout, доступную в Google Support Design Library. Вот пример того, как он должен использоваться.

 <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'