gpt4 book ai didi

android - 不能将 DrawerLayout 放在 StatusBar 下

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:09:02 27 4
gpt4 key购买 nike

我有一个使用 Navigation Drawer 的 Activity ,并且使用 ScrimInsetsFrameLayout 我能够将布局放在 StatusBar 下并且一切正常。然后我决定将所有 Activity 布局的 ToolbarStatusBar 的颜色替换为 png 背景。我在模拟器(带有 android 6.0 的 Nexus 5)上运行该应用程序,结果正是我想要的,就像您在下面的 Image #1 中看到的那样,但是当我在我的设备上尝试时(Galaxy Note 3对于 android 5.0),ScrimInsetsFrameLayout 内的布局位于 StatusBar Image #2 之上。我不明白哪里出了问题,你能帮帮我吗?

这是我的 values-v21 和我的 activity.xml

<style parent="Theme.AppCompat.Light.NoActionBar" name="AppTheme_Activities">

<item name="android:colorPrimary">@android:color/transparent</item>
<item name="android:colorPrimaryDark">@color/insetF</item>
<item name="android:navigationBarColor">@color/insetF</item>
<item name="android:colorAccent">@color/primary</item>
<item name="android:colorEdgeEffect">@color/primary</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@color/insetF</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>

</style>



<?xml version="1.0"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/drawer"
android:fitsSystemWindows="true"
android:background="@drawable/background"> <!--png image-->

<FrameLayout
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent">

<include layout="@layout/toolbar_activities" android:id="@+id/toolbar_layout"/>

<FrameLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/content_frame">

</FrameLayout>

</FrameLayout>

<com.example.myapplication.ScrimInsetsFrameLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/linearLayout"
android:layout_width="304dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:insetForeground="#4000"
android:clickable="true"
android:background="#ffffff"> .....

</com.example.myapplication.ScrimInsetsFrameLayout>

</android.support.v4.widget.DrawerLayout>

图片#1 enter image description here

图片#2 enter image description here

最佳答案

enter image description here

  1. 添加到您的 onCreate()Activity

        getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
  2. 更改 ScrimInsetsFrameLayoutandroid:fitsSystemWindows属性(property)false

  3. 删除 android:fitsSystemWindows="true"来自 DrawerLayout

    <android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/drawer"
    android:background="@drawable/background"> <!--png image-->

    <FrameLayout
    android:orientation="vertical"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <include layout="@layout/toolbar_activities" android:id="@+id/toolbar_layout"/>

    <FrameLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:id="@+id/content_frame">

    </FrameLayout>

    </FrameLayout>

    <com.example.myapplication.ScrimInsetsFrameLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/linearLayout"
    android:layout_width="304dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="false"
    app:insetForeground="#4000"
    android:clickable="true"
    android:background="#ffffff"> .....

    </com.example.myapplication.ScrimInsetsFrameLayout>

    </android.support.v4.widget.DrawerLayout>
  4. 将这些样式添加到您的 AppTheme_Activities 中主题(保持你的状态所需的颜色):

            <item name="windowActionBarOverlay">false</item>
    <item name="android:windowActionBarOverlay">false</item>
    <item name="android:fitsSystemWindows">false</item>
    <item name="android:statusBarColor">#4000</item>
  5. 这将导致工具栏也位于状态栏下方,因此您需要执行此 hack:

    • 制作Toolbar的高度 = "wrap_content"

      <android.support.v7.widget.Toolbar
      android:id="@+id/toolbar"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:background="?attr/colorPrimary"
      app:popupTheme="@style/AppTheme.PopupOverlay" />
    • 设置Padding对于 Toolbar :

      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
      setSupportActionBar(toolbar);
      toolbar.setPadding(0, getStatusBarHeight(), 0, 0);
      ......
      ......
      public int getStatusBarHeight() {
      int result = 0;

      if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
      int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
      if (resourceId > 0) {
      result = getResources().getDimensionPixelSize(resourceId);
      }
      }
      return result;
      }

应该是这样吧!

我已经将状态栏下方带有抽屉导航的测试应用程序的源代码上传到我的保管箱 - feel free to check it out.

我刚才回答了非常相似的问题 - 也许你也会发现它有用:Translucent StatusBar with dynamic ActionBar color in Android

希望对你有帮助

关于android - 不能将 DrawerLayout 放在 StatusBar 下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456192/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com