MapFragment obtiene una superposición oscura cuando se utiliza en DialogActivity

Estoy intentando mostrar un MapFragment de la Android Maps v2 API en una Activity con el tema @android:style/Theme.DeviceDefault.Light.Dialog.NoActionBar . Esto funciona bien. Sin embargo, el mapa obtiene una superposición oscura:

Diálogo

Cuando cambio el tema a @android:style/Theme.DeviceDefault.Light.NoActionBar , el mapa se muestra como debería:

Normal

Este es mi archivo de diseño 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> 

¿Que está sucediendo aquí?

Tengo el mismo problema. Después de algunas investigaciones, encontré dos hacks:

  • Agregue este param para su tema en styles.xml:
    <item name="android:backgroundDimEnabled">false</item>

Parte mala: elimina las superposiciones negras detrás de la actividad.

  • Establezca el orden z en la parte superior del objeto de mapa:
    GoogleMapOptions googleMapsOptions = new GoogleMapOptions();
    googleMapsOptions.zOrderOnTop( true );
    MapFragment mapFragment = MapFragment.newInstance(googleMapsOptions);

Mala parte: El mapa está por encima del control de Zoom y el botón MyLocation.

Personalmente, elijo la primera solución.
Espero que esto ayude !

Enlace a la fuente

Para DialogFragment :

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

Para añadir a la solución de Audrel , se puede desactivar dinámicamente la ventana del diálogo cada vez que se muestra el mapa y atenuarlo cuando el mapa se ha ido (por ejemplo, cuando el diálogo tiene varias páginas, una de ellas es un mapa):

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

Todavía sólo otra solución en lugar de abordar la causa raíz …

Dependiendo de cuál sea su propósito para el mapa en el diálogo, si no necesita ninguno de los controles del mapa, puede utilizar liteMode en el que sólo se muestra una imagen del mapa con la ubicación que cargue. No tiene este problema de superposición de capa z.

Puede agregar esto al diseño de MapView xml:

map:liteMode="true"

Esto funcionó para mí, porque no quería que mi mapa fuera interactivo de todos modos.

Puedes leer los documentos de Google aquí: https://developers.google.com/maps/documentation/android-api/lite

¡Añada simplemente esta línea a su estilo !

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

Este es mi estilo :

 <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> 
  • Centro de aplicaciones de Google Maps V2 Ubicación actual en pantalla
  • mapas androides, marcadores y fugas de memoria
  • Android MapFragment Runtime Error - No se pudo encontrar la clase 'maps.jk'
  • El nuevo procesamiento de gms.maps.MapView se retrasa un poco cuando está en un ListView?
  • FindFragmentById (R.id.map) devuelve null en Android L
  • Google map android API V2 se estrelló
  • mapFragment.getMapAsync (this) - NullPointerException
  • Intercambio entre el fragmento de Google Maps v2 y el listfragment
  • La importación android.support.v7.app.MediaRouteActionProvider no se puede resolver
  • Android Google Map v2 Ejemplo de código
  • ¿Cómo aumentar la consistencia de las notificaciones de entrada / salida de geofence de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.