【问题标题】:Toolbar overlapping below status bar工具栏在状态栏下方重叠
【发布时间】:2015-06-26 15:00:09
【问题描述】:

我想在我的活动中使用 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 的?发布它们。
  • CoordinatorLayout 你可以试试这个:stackoverflow.com/a/47906087/2201814
  • 对于那些面临 androidx.coordinatorlayout.widget.CoordinatorLayout 作为根视图问题的人应该设置 android:fitsSystemWindows="false" 。这对我有用......正如其中一位 SO 用户所建议的那样下面..

标签: android xml android-layout material-design material-components-android


【解决方案1】:

在布局的根视图中使用android:fitsSystemWindows="true"(在您的情况下为LinearLayout)。 而android:fitsSystemWindows 是一个

根据系统窗口调整视图布局的内部属性,例如 作为状态栏。如果为真,则调整此视图的填充以离开 系统窗口的空间。仅当此视图位于 非嵌入式活动。

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

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

这个对应全局属性资源符号 适合SystemWindows。

【讨论】:

  • @AimanB 你可以通过在主题中设置为&lt;item name="android:fitsSystemWindows"&gt;true&lt;/item&gt;来全局设置它
  • @Samir 这有一个副作用,正如this comment中所报告的那样
  • 这个问题会在我们添加 android:fitsSystemWindows="true" 到根布局后出现,如果你的样式包含 @android:color/transparent 这个。刚才提到的那些正在阅读这个问题的人。
  • 我遇到了同样的问题,android:fitsSystemWindows="true" 对我不起作用。任何人都有解决方案,请发布。
  • 这个答案解决了我的问题。但现在我发现所有的 android toasts 都带有 0 padding!
【解决方案2】:

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

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

并确保

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

【讨论】:

  • 如果你有类似 app:layout_behavior="@string/appbar_scrolling_view_behavior" 的东西,删除它! @TheHunter
  • 设置 false
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

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

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

    确保您没有按照 AS 默认设置的以下行:

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

    【讨论】:

      【解决方案5】:

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

      android:fitsSystemWindows="false"
      

      在父活动布局文件中,很多地方不建议这样做,但它对我有用并且节省了我的时间

      【讨论】:

      • 当我在布局中的根视图是 androidx.coordinatorlayout.widget.CoordinatorLayout 类型时,这也适用于我。
      【解决方案6】:

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

      【讨论】:

        【解决方案7】:

        根据谷歌文档,我们不应该在应用主题中使用 fitSystemWindows 属性,它旨在用于布局文件。在主题中使用可能会导致吐司消息出现问题。

        检查问题here 和导致问题的示例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>
        

        【讨论】:

          【解决方案8】:

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

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

          【讨论】:

            【解决方案9】:

            发生这种情况的原因有很多..首先你必须检查你的他们是怎么回事..

            <style name="AppTheme" parent="BaseAppTheme">
                    <item name="android:windowBackground">@android:color/white</item>
                    <item name="colorPrimary">@color/primary</item>
                    <item name="colorPrimaryDark">@color/primary_dark</item>
                    <item name="colorAccent">@color/accent</item>
                    <item name="android:textColorHint">@color/secondary_text</item>
                </style>

            如果您在主题中使用&lt;item name="android:windowTranslucentStatus"&gt;true&lt;/item&gt; 此代码,它应该与您的操作栏重叠。你可以用它 false 来解决这个问题。
            &lt;item name="android:windowTranslucentStatus"&gt;false&lt;/item&gt;.

            或者如果你想保持真实,请使用

            &lt;item name="android:fitsSystemWindows"&gt;true&lt;/item&gt; 为真。您还有另一个选择来使用它。你可以使用 android:fitsSystemWindows="true"

            this 在特定 xml 文件的根视图中。

            【讨论】:

              【解决方案10】:

              为防止工具栏与状态栏重叠,请在您的主题中添加这些行

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

              对我有用

              【讨论】:

                猜你喜欢
                • 2019-01-11
                • 1970-01-01
                • 2015-05-02
                • 2011-02-20
                • 2016-03-03
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多