当在DialogActivity中使用MapFragment时会得到一个黑色叠加层

我正在尝试使用@android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar主题在Activity显示Android Maps v2 API@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> 

这里发生了什么?

Solutions Collecting From Web of "当在DialogActivity中使用MapFragment时会得到一个黑色叠加层"

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

  • 在styles.xml中为你的主题添加这个参数:
    <item name="android:backgroundDimEnabled">false</item>

不好的部分:它删除活动后面的黑色重叠。

  • 为地图对象设置顶部的z顺序:
    GoogleMapOptions googleMapsOptions = new GoogleMapOptions();
    googleMapsOptions.zOrderOnTop( true );
    MapFragment mapFragment = MapFragment.newInstance(googleMapsOptions);

不良部分:地图位于缩放控制和“我的位置”button上方。

Personnaly,我select第一个解决scheme。
希望这个帮助!

链接到源

对于DialogFragment

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

为了增加Audrel的解决scheme ,可以在地图显示时dynamic地调暗对话窗口的亮度 ,当地图消失时(例如当你的对话框有多个页面,其中一个是地图时)将其调暗。

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

仍然只是另一个解决方法,而不是解决根本原因…

根据对话框中地图的用途,如果您不需要任何地图控件,则可以使用liteMode ,其中仅显示地图的图像并显示您加载的任何位置。 它没有这个Z层覆盖问题。

您可以将其添加到MapView布局xml:

map:liteMode="true"

这对我有用,因为我不希望我的地图是互动的。

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

只需将此线添加到您的风格

  <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>