Lollipop 状态栏上的工具栏阴影
Toolbar's shadow on status bar for Lollipop
我正在使用 Android Studio 中使用 AppCompat Toolbar
的模板。不幸的是,工具栏在状态栏上投射了阴影,所以它看起来不像 right.I 还实现了 NavigationDrawer
所以我不能简单地设置颜色状态栏。
这是它的样子:
应该是这样的:
activity_main.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
app_bar_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="hu.pe.thinhhoang.aaosync.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
styles.xml (v21)
<resources>>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
此影子是 windowContentOverlay
在 LOLLIPOP 以下 API 上的一部分(在 LOLLIPOP 上它是 @null)。
当您使用工具栏小部件时,工具栏不再是 window 装饰的一部分,因此阴影开始于工具栏上方 window 的顶部而不是下方(因此您想要windowContentOverlay 为@null)。此外,您需要在工具栏 pre-LOLLIPOP 下方添加一个额外的空视图,并将其背景设置为可绘制的垂直阴影(8dp tall gradient
从 #20000000
到 #00000000
效果最佳)。在 LOLLIPOP 上,您可以在工具栏上 set 8dp elevation
。
那是因为:
<item name="android:statusBarColor">@android:color/transparent</item>
我猜。
知道了,检查一下:
http://developer.android.com/training/material/theme.html#StatusBar
To set a custom color for the status bar, use the
android:statusBarColor
attribute when you extend the material theme.
By default, android:statusBarColor
inherits the value of
android:colorPrimaryDark
.
并且您已将其设置为 transparent
。这不是一个好方法,因为 Google 为您提供了以下代码:
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
还有,而不是:
<style name="AppTheme.NoActionBar">
使用这个并添加父项并检查:
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
我尝试了所有其他答案,none 成功了。解决它的方法是将其添加到 AppBarLayout:
app:elevation="0dp"
像这样放置一个LinearLayout:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ui.activities.MainScreenActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main_screen" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
要获得正确的行为,您需要删除
android:fitsSystemWindows="true"
来自android.support.design.widget.CoordinatorLayout
在您的styles.xml
中,colorPrimaryDark
中定义的颜色将用于绘制通知栏。
您的 values-v21
文件夹中需要 styles.xml
样式中包含以下项目:
<item name="android:statusBarColor">@android:color/transparent</item>
希望对您有所帮助。
我正在使用 Android Studio 中使用 AppCompat Toolbar
的模板。不幸的是,工具栏在状态栏上投射了阴影,所以它看起来不像 right.I 还实现了 NavigationDrawer
所以我不能简单地设置颜色状态栏。
这是它的样子:
应该是这样的:
activity_main.xml
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</android.support.v4.widget.DrawerLayout>
app_bar_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="hu.pe.thinhhoang.aaosync.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main" />
</android.support.design.widget.CoordinatorLayout>
styles.xml (v21)
<resources>>
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
</resources>
此影子是 windowContentOverlay
在 LOLLIPOP 以下 API 上的一部分(在 LOLLIPOP 上它是 @null)。
当您使用工具栏小部件时,工具栏不再是 window 装饰的一部分,因此阴影开始于工具栏上方 window 的顶部而不是下方(因此您想要windowContentOverlay 为@null)。此外,您需要在工具栏 pre-LOLLIPOP 下方添加一个额外的空视图,并将其背景设置为可绘制的垂直阴影(8dp tall gradient
从 #20000000
到 #00000000
效果最佳)。在 LOLLIPOP 上,您可以在工具栏上 set 8dp elevation
。
那是因为:
<item name="android:statusBarColor">@android:color/transparent</item>
我猜。
知道了,检查一下:
http://developer.android.com/training/material/theme.html#StatusBar
To set a custom color for the status bar, use the
android:statusBarColor
attribute when you extend the material theme. By default,android:statusBarColor
inherits the value ofandroid:colorPrimaryDark
.
并且您已将其设置为 transparent
。这不是一个好方法,因为 Google 为您提供了以下代码:
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
还有,而不是:
<style name="AppTheme.NoActionBar">
使用这个并添加父项并检查:
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
我尝试了所有其他答案,none 成功了。解决它的方法是将其添加到 AppBarLayout:
app:elevation="0dp"
像这样放置一个LinearLayout:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ui.activities.MainScreenActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<include layout="@layout/content_main_screen" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
要获得正确的行为,您需要删除
android:fitsSystemWindows="true"
来自android.support.design.widget.CoordinatorLayout
在您的styles.xml
中,colorPrimaryDark
中定义的颜色将用于绘制通知栏。
您的 values-v21
文件夹中需要 styles.xml
样式中包含以下项目:
<item name="android:statusBarColor">@android:color/transparent</item>
希望对您有所帮助。