在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布局文件:

      

这里发生了什么?

Solutions Collecting From Web of "在DialogActivity中使用时,MapFragment会获得深色叠加"

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

  • 在styles.xml中为您的主题添加此参数:
    false

不好的部分:它删除了活动背后的黑色叠加层。

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

错误部分:地图位于“缩放”控件和“我的位置”按钮上方。

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

链接到源

对于DialogFragment

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

要添加到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); } 

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

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

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

map:liteMode="true"

这对我有用,因为我不希望我的地图无论如何都是互动的。

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

只需将此系列添加到您的风格中

  false 

这是我的风格 :