Android:半透明状态栏不适用于 Google 地图 API

Android: Translucent status bar not working with Google Maps API

我有一个问题,状态栏不会变成半透明。半透明状态栏和导航栏代码本身工作正常,但是,当我将 Google 地图片段实施到 activity 视图中时,半透明栏变成灰色。我已经用完全透明的状态栏对此进行了测试,但它一开始又能正常工作,一旦添加了地图,它就会变成白色背景。 Google 地图似乎有某种叠加层。感谢任何帮助使状态栏与 Google 地图 API 半透明。

XML 文件

<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">


    <fragment xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.mapwithmarker.MapsMarkerActivity"
        tools:layout="@layout/activity_main" />

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

半透明状态栏

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        }

我找到了解决办法。如果有人在抽屉布局中添加地图,请将 DrawerLayout 中的 android:fitsSystemWindows 设置为 "false"

fitsSystemWindows 设置为 false 对我不起作用

然而,负边距起到了作用

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:showIn="@layout/app_bar_main"
    android:id="@+id/fragment_container"
    android:fitsSystemWindows="true"
    android:padding="0dp">
    <fragment
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:map="http://schemas.android.com/apk/res-auto"
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="-25dp"
        map:uiCompass="false"
        android:fitsSystemWindows="true" />
</android.support.design.widget.CoordinatorLayout>

如果您在 Activity 中添加地图,则在您的 onCreate() 方法中写入以下代码行:

    window.apply {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                statusBarColor = Color.TRANSPARENT
        }
    }

如果您在 Fragment 中添加地图,则在 onCreate() 方法中添加以下代码行:

    activity!!.window.apply {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
            addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
            decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                statusBarColor = Color.TRANSPARENT
        }
    }