Material Design – AppCompat工具栏不显示阴影

我正在使用AppCompat V7中的工具栏replace上一个操作栏,并希望获得上一个操作栏的工具栏阴影。 但工具栏默认情况下没有影子,我已经尝试了从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> 

谁能帮忙?

谢谢!

更新1:从Willis的build议,我得到的阴影显示,但它不是在工具栏下,而是在工具栏的左侧。 在这里输入图像说明

更新2:我注意到,如果我没有在toolbar.xml和styles.xml中设置windowContentOverlay,阴影实际上是在工具栏的顶部。 在这里输入图像说明

Solutions Collecting From Web of "Material Design – AppCompat工具栏不显示阴影"

这两个是完全不同的阴影。 垂直的DrawerLayout 。 它应该放在扩展抽屉旁边。 水平的是在LOLLIPOP下面的API上的@null一部分(在LOLLIPOP它是@null )。

当您使用Toolbar小部件时,工具栏不再是窗口装饰的一部分,因此阴影从工具栏上方的窗口顶部开始,而不是下方 (因此您希望@null@null )。 此外,您需要添加一个额外的空View工具栏前的LOLLIPOP与背景设置为垂直阴影可绘制(从#20000000#00000000 8dp高梯度效果最好)。 在LOLLIPOP您可以在工具栏上设置8dp高程。

注意:使用与抽屉阴影相同的渐变但水平,以获得最佳效果。

您可以使用setElevation方法来设置阴影的数量。 例如:

 getSupportActionBar().setElevation(25); 

setElevation /递减传递给setElevation的值将增加/减less阴影效应的存在。

要在您的工具栏下显示阴影,请使用Google Androiddevise支持库中提供的AppBarLayout。 这是一个如何使用它的例子。

 <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 Androiddevise支持库,请在build.gradle文件中input以下内容:

  compile 'com.android.support:design:22.2.0'