工具栏重叠在状态栏下方

时间:2015-04-20 02:41:37

标签: android xml android-layout

我想在我的活动中使用appcompat v21工具栏。但我实施的工具栏重叠在状态栏下方。我该如何解决?

overlapping toolbar

这是活动布局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>

8 个答案:

答案 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消息出现问题。

检查问题here&amp;导致问题的示例here

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