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:
- Ejecución de Google Maps v2 en el emulador de Android
- Google Map Android API v2: GoogleMap es nulo
- Dibuja una forma personalizada en android utilizando XML
- Evento para el cambio de posición del marcador
- Android Map V2 - ¿Por qué MAPS_RECEIVE permiso?
Cuando cambio el tema a @android:style/Theme.DeviceDefault.Light.NoActionBar
, el mapa se muestra como debería:
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í?
- Android maps v2 se vuelve de baja calidad cuando el área del mapa se mueve automáticamente
- Cómo mostrar las flechas de dirección en el marcador de mapa de google maps v2 android
- Android - Dragging marcador sin tener que mantener en el mapa api v2
- ¿Cómo detectar constantemente las ubicaciones de los marcadores cercanos desde la ubicación actual en Google Maps android?
- MapView (mapas de android api v2) dentro de la distribución de fragmentos no muestra
- ¿Cuál es la diferencia entre 'debug.keystore' y 'release.keystore' en Android?
- Abrir mapa de la calle trabajando offline en Android
- Compruebe si el marcador está dentro del radio del círculo
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>
- Cómo localizar una aplicación de Android en idioma indonesio
- Forzar la ocultación de la barra de direcciones en Chrome en Android