Android 状态栏下方的工具栏重叠

Android 状态栏下方的工具栏重叠,android,xml,android-layout,material-design,material-components-android,Android,Xml,Android Layout,Material Design,Material Components Android,我想在活动中使用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="ver

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

@颜色/原色
@颜色/原色/深色
@颜色/口音

在布局的根视图中使用
android:fitsystemwindows=“true”
。 android:fitsystemwindows是一个

用于根据系统窗口调整视图布局的内部属性,例如 作为状态栏。如果为true,则将此视图的填充调整为离开 系统窗口的空间。仅当此视图处于启用状态时才会生效 非嵌入式活动

必须是布尔值,为“真”或“假”

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

这对应于全局属性资源符号 安装系统窗口


对我来说,问题是我从一个例子中复制了一些东西并使用了

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

只需删除此项即可解决我的问题。

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

 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 <item name="android:statusBarColor">@color/colorPrimaryDark</item>
true
@颜色/原色暗
而且要确定

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

我从/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>
true
@android:彩色/透明
假的
真的
真的
真的

没有一个答案对我有效,但在我在根视图上设置了
android:fitSystemWindows
之后,这才是最终有效的答案(我在样式v21中设置了这些):

true
假的
确保您的没有默认设置的以下行:

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

没有一个答案对我有效,但这是我设置后最终有效的答案:

android:fitsSystemWindows="false"

在父活动布局文件中,很多地方不建议使用它,但它对我有用,可以保存我的一天。

根据谷歌文档,我们不应该在应用程序主题中使用fitsSystemWindows属性,它是用于布局文件的。在主题中使用会导致toast消息出现问题

检查问题和导致问题的示例

true
使用正确方法的示例,该方法也适用于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>

从样式或样式(21)中删除下面的行

true
@颜色/原色暗
假的

您是如何定制应用程序的
主题的?发布它们。在
CoordinatorLayout
中,您可以尝试以下方法:stackoverflow.com/a/47906087/2201814对于那些面临androidx.CoordinatorLayout.widget.CoordinatorLayout作为根视图的人,应该设置android:FitsystemWindows=“false”。这对我来说很有效。。。正如下面的一位SO用户所建议的那样。@AimanB您可以通过在主题中设置为
true
@Samir来全局设置它。这有一个副作用,正如本期报道的,即使在我们将android:fitsSystemWindows=“true”添加到根布局之后,如果您的样式包含@android:color/transparent,也会产生副作用。我也有同样的问题,android:fitsystemwindows=“true”对我不起作用。任何人都有解决方案,请发布。这个答案解决了我的问题。但是现在我发现所有的安卓祝酒都是0填充的!如果您有类似app:layout\u behavior=“@string/appbar\u scrolling\u view\u behavior”的内容,请将其删除@HunterSet False当我在布局中的根视图是
androidx.coordinatorlayout.widget.coordinatorlayout
类型时,这也适用于我。
<item name="android:fitsSystemWindows">true</item>
<?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>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>