棒棒糖状态栏上的工具栏阴影

时间:2016-01-20 04:43:30

标签: android statusbar android-toolbar android-navigation-drawer

我使用了使用AppCompat Toolbar Android Studio 模板。遗憾的是,工具栏会在状态栏上投下阴影,因此它看起来并不正确。我还实现了NavigationDrawer ,因此我无法简单地设置状态的颜色杆

它的外观如下:

enter image description here

应该是这样的:

enter image description here

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>

5 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:6)

我尝试了所有其他答案,但都没有效果。修复它的原因是将其添加到AppBarLayout:

    app:elevation="0dp"

答案 2 :(得分:5)

此影子是LOLLIPOP 下面的API上windowContentOverlay的一部分(在LOLLIPOP上是@null )。

当您使用工具栏小部件时,工具栏不再是窗口装饰的一部分,因此阴影从窗口顶部开始,而不是在工具栏下方(因此您希望windowContentOverlay为@null)。此外,您需要在LOLLIPOP工具栏下方添加一个额外的空视图,其背景设置为垂直阴影可绘制(从8dp tall gradient#20000000的{​​{1}}效果最佳)。在LOLLIPOP上,您可以在工具栏上#00000000

答案 3 :(得分:4)

因为:

<item name="android:statusBarColor">@android:color/transparent</item>

我猜。

知道了,请查看:

http://developer.android.com/training/material/theme.html#StatusBar

  

要为状态栏设置自定义颜色,请使用   扩展材质主题时,android:statusBarColor属性。   默认情况下,android:statusBarColor会继承值   android:colorPrimaryDark

您已将其设置为transparent。由于Google为您提供此代码,因此这不是一个好方法:

<item name="colorPrimaryDark">@color/colorPrimaryDark</item>

而且,而不是:

<style name="AppTheme.NoActionBar">

使用此选项并添加父项并检查:

<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">

答案 4 :(得分:3)

要获得正确的行为,您需要删除

android:fitsSystemWindows="true"

来自android.support.design.widget.CoordinatorLayout

styles.xml中,colorPrimaryDark中定义的颜色将用于绘制通知栏。

您的styles.xml文件夹中需要values-v21,并且样式中包含以下项目:

 <item name="android:statusBarColor">@android:color/transparent</item>

希望这有帮助。