Тень панели инструментов на панели состояния для Lollipop
Я использую шаблон из Android Studio, который использовал AppCompat Toolbar
. К сожалению, панель инструментов отбрасывает тень на строку состояния, поэтому она не выглядит правильно. Я также реализую 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>
Ответы
Ответ 1
Эта тень является частью windowContentOverlay
на API ниже LOLLIPOP (на LOLLIPOP it @null).
Когда вы работаете с виджетами панели инструментов, панель инструментов больше не является частью декора окна, поэтому тень начинается в верхней части окна над панелью инструментов, а не ниже (так что вы хотите, чтобы windowContentOverlay был @null). Кроме того, вам нужно добавить дополнительный пустой вид под панелью инструментов pre-LOLLIPOP с фоном, установленным на вертикальную теневую растяжку (8dp tall gradient
от #20000000
до #00000000
работает лучше всего). На LOLLIPOP вы можете set 8dp elevation
на панели инструментов.
Ответ 2
Поместите 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>
Ответ 3
Я попробовал все остальные ответы, и никто не работал. Исправлено добавление этого в AppBarLayout:
app:elevation="0dp"
Ответ 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">
Ответ 5
Чтобы получить правильное поведение, вам нужно удалить
android:fitsSystemWindows="true"
От android.support.design.widget.CoordinatorLayout
В вашем styles.xml
цвет, определенный в colorPrimaryDark
, будет использоваться для рисования панели уведомлений.
Вам понадобится styles.xml
в вашей папке values-v21
со следующим элементом в ваших стилях:
<item name="android:statusBarColor">@android:color/transparent</item>
Надеюсь, что это поможет.