在DialogActivity使用时MapFragment得到一个黑暗覆盖(MapFragment

2019-07-18 22:46发布

我试图表现出MapFragment中的Android Maps v2 API中的Activity@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar主题。 这工作得很好。 然而,地图得到一个黑暗的叠加:

当我更改主题,以@android:style/Theme.DeviceDefault.Light.NoActionBar ,地图显示,因为它应该:

这是我的XML布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <fragment
        android:id="@+id/mapfragment"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        class="com.google.android.gms.maps.MapFragment" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="HELLO"
        android:textSize="@dimen/textsize_large" />

</LinearLayout>

这是怎么回事吗?

Answer 1:

我得到了同样的问题。 经过一番研究,我发现了两个黑客:

  • 收藏此参数有关的styles.xml你的主题:
    <item name="android:backgroundDimEnabled">false</item>

坏的部分:它消除了活动背后的黑色覆盖。

  • 在上面的地图对象设置Z顺序:
    GoogleMapOptions googleMapsOptions = new GoogleMapOptions();
    googleMapsOptions.zOrderOnTop( true );
    MapFragment mapFragment = MapFragment.newInstance(googleMapsOptions);

坏的部分:地图是变焦控制和MyLocation按钮的上方。

Personnaly,我选择了第一个解决方案。
希望这有助于!

链接到源



Answer 2:

For DialogFragment:

getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);


Answer 3:

要添加到Audrel的解决方案 ,可以动态地取消昏暗的对话窗口每当显示的地图和暗淡回来时,地图消失(例如,当你的对话框有多个页面,其中一个是地图):

private float mDimAmount;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    WindowManager.LayoutParams params = getWindow().getAttributes();
    mDimAmount = params.dimAmount; // remember original dim amount
    ...
}

private void undim() {
    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.dimAmount = 0.0f;
    getWindow().setAttributes(params);
}

private void dim() {
    WindowManager.LayoutParams params = getWindow().getAttributes();
    params.dimAmount = mDimAmount;
    getWindow().setAttributes(params);
}

不过只是另一个解决办法,而不是解决的根本原因...



Answer 4:

根据你的目的是什么,在对话框中的地图,如果你不需要任何地图控件,您可以使用liteMode在刚刚地图的图像显示与您加载的任何位置。 它没有这个Z-层覆盖问题。

您可以添加这对MapView布局XML:

map:liteMode="true"

这为我工作,因为我不希望我的地图是互动的反正。

你可以在这里阅读谷歌文档: https://developers.google.com/maps/documentation/android-api/lite



Answer 5:

只需将此行添加到你的风格

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

这是我的风格 :

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/dark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="windowActionBar">false</item>
</style>


文章来源: MapFragment gets a dark overlay when used in DialogActivity