工具栏在状态栏下方重叠


168

我想在我的活动中使用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>

Theme是如何自定义您的应用程序的?发布它们。
SilentKnight 2015年

CoordinatorLayoutstackoverflow.com/a/47906087/2201814:你可以试试这个
MHSFisher

对于那些谁是androidx.coordinatorlayout.widget.CoordinatorLayout面临的问题,因为根视图应该设置机器人:fitsSystemWindows =“假”。这为我工作......通过以下..因此用户之一的建议
Muahmmad Tayyib

Answers:


273

使用android:fitsSystemWindows="true"你的布局(LinearLayout中在你的情况下)的根视图。并且android:fitsSystemWindows

内部属性可根据系统窗口(例如状态栏)调整视图布局。如果为true,则调整此视图的填充以为系统窗口留出空间。仅当此视图处于非嵌入式活动中时才会生效。

必须为布尔值,“ true”或“ false”。

这也可能是对包含此类型值的资源(形式为“ @ [package:] type:name”)或主题属性(形式为“?[package:] [type:] name”)的引用。

这对应于全局属性资源符号fitsSystemWindows。


22
@AimanB,您可以将主题设置为<item name="android:fitsSystemWindows">true</item>
Samir

13
@Samir这有副作用的报道在此评论
苏菲安

9
即使我们在根布局中添加了android:fitsSystemWindows =“ true”,如果您的样式包含<item name =“ android:statusBarColor”> @ android:color / transparent </ item>,此问题也会出现。刚刚为那些正在阅读此问题的人提及。
萨克·侯赛因

3
我遇到了同样的问题,而android:fitsSystemWindows =“ true”对我不起作用。任何人都有解决方案,请张贴。
贾廷

1
这个答案解决了我的问题。但是现在我发现所有Android Toast的填充都是0!
kds23

18

只需将其设置为v21 / styles.xml文件

 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 <item name="android:statusBarColor">@color/colorPrimaryDark</item>

并确保

 <item name="android:windowTranslucentStatus">false</item>

1
如果您有类似app:layout_behavior =“ @ string / appbar_scrolling_view_behavior”之类的东西,请删除它!@TheHunter
Zahra.HY16年

设置<item name =“ android:windowTranslucentStatus”> false </ item>
Zahra.HY16年

10

对我来说,问题是我复制了示例中的内容并使用了

<item name="android:windowTranslucentStatus">true</item>

只是删除这个解决了我的问题。


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>

6

没有答案对我有用,但这是我设置后终于有用的方法:

android:fitsSystemWindows="false"

在家长活动布局文件中,不建议在很多地方使用它,但对我有用,并节省了我的时间


当我在布局中的根视图是一种androidx.coordinatorlayout.widget.CoordinatorLayout类型时,这对我也有效。
Faheem Ezani

5

我从/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>

0

根据google docs,我们不应在应用程序主题中使用fitsSystemWindows属性,而是应在布局文件中使用。在主题中使用会导致吐司消息出现问题。

选中此处 的问题和此处引起的问题示例

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

0

从样式或样式中删除以下几行(21)

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.