Android:半透明状态栏无法使用Google Maps API

时间:2017-01-17 12:18:09

标签: java android google-maps-android-api-2 android-xml android-statusbar

我遇到状态栏不会变成半透明的问题。半透明状态栏和导航条形码本身可以正常工作,但是,当我将Google Maps Fragment实施到活动视图中时,半透明条形变为灰色。我已经使用完全透明的状态栏对其进行了测试,但最初会再次运行,然后在添加地图后会显示白色背景。好像谷歌地图有某种叠加效果。任何帮助都可以通过Google Maps API获得状态栏的半透明效果。

As

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);
        }

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

如果您将地图添加到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
        }
    }

答案 2 :(得分:0)

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>