我想在我的活动中使用appcompat v21工具栏。但我实施的工具栏重叠在状态栏下方。我该如何解决?
这是活动布局xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar" />
<FrameLayout
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
工具栏视图:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary" />
主题风格:
<style name="AppTheme" parent="MaterialNavigationDrawerTheme.Light.DarkActionBar">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
</style>
答案 0 :(得分:230)
在布局的根视图中使用android:fitsSystemWindows="true"
(在您的情况下为LinearLayout)。
android:fitsSystemWindows
是
内部属性,根据系统窗口调整视图布局 作为状态栏。如果为true,则调整此视图的填充以便离开 系统窗口的空间。只有在此视图出现时才会生效 非嵌入式活动。
必须是布尔值,&#34; true&#34;或&#34; false&#34;。
这也可能是对资源的引用(在表单中) &#34; @ [package:] type:name&#34;)或theme属性(在表单中 &#34;?[package:] [type:] name&#34;)包含此类型的值。
这对应于全局属性资源符号 fitsSystemWindows。
答案 1 :(得分:17)
只需将其设置为v21 / styles.xml文件
即可 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
并确保
<item name="android:windowTranslucentStatus">false</item>
答案 2 :(得分:10)
这些答案都没有对我有用,但这是我在根视图上设置android:fitSystemWindows
之后最终起作用的(我在样式v21中设置了这些):
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">false</item>
确保您不具有以下行,因为默认情况下AS将其置于:
<item name="android:statusBarColor">@android:color/transparent</item>
答案 3 :(得分:9)
对我来说,问题是我从一个例子中复制了一些东西并使用了
<item name="android:windowTranslucentStatus">true</item>
只是删除了这个修复我的问题。
答案 4 :(得分:4)
我从 /res/values-v21/styles.xml 中删除了下面提到的所有行,现在工作正常。
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="windowActionBar">false</item>
<item name="android:windowDisablePreview">true</item>
<item name="windowNoTitle">true</item>
<item name="android:fitsSystemWindows">true</item>
答案 5 :(得分:3)
这些答案都不适合我,但这是我设定之后最终奏效的 android:fitsSystemWindows =“false”
在父活动布局文件中,它不是在很多地方建议的,但它对我有用并节省了我的一天
答案 6 :(得分:0)
根据谷歌文档,我们不应该在app主题中使用fitsSystemWindows属性,它旨在用于布局文件。在主题中使用可能会导致Toast消息出现问题。
<item name="android:fitsSystemWindows">true</item>
使用正确方法的示例,也适用于 windowTranslucentStatus 。
<?xml version="1.0" encoding="utf-8"?>
<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:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<include layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</include>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
android:background="@color/white"
android:animateLayoutChanges="true"
app:headerLayout="@layout/navigation_drawer_header"
app:menu="@menu/navigation_drawer_menu" />
</android.support.v4.widget.DrawerLayout>
答案 7 :(得分:0)
从样式或样式(21)中删除以下行
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>