J'essaie d'apprendre Android, et après avoir suivi les instructions sur la façon d'utiliser l'API Google Maps V.2, je l'ai maintenant fait fonctionner. Cependant, les instructions sur la façon de configurer l'état initial des cartes, trouvées à developers.google.com , suggèrent un espace de noms défini dans le fichier xml, dans ce cas "carte".
Le code xml ci-dessous donne l'erreur med "Préfixe d'espace de noms inattendu" map "". Essayer de définir le xmlns: map à l'intérieur de la balise fragment a donné la même erreur mais avec "xmlns".
Il me manque évidemment des connaissances fondamentales sur le xml ici, quelqu'un peut-il m'aider?
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:map="http://schemas.Android.com/apk/res-auto" <!-- Definition -->
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<fragment
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
class="com.google.Android.gms.maps.SupportMapFragment"
map:cameraBearing="112.5"/> <!-- PROBLEM -->
</RelativeLayout>
Vous devez faire deux choses:
Tout d'abord: https://docs.google.com/document/pub?id=19nQzvKP-CVLd7_VrpwnHfl-AE9fjbJySowONZZtNHzw
Ajoutez la dépendance aux services Google Play dans votre projet
Project -> Properties -> Android -> Library, Add -> google-play-services_lib
Deuxièmement: https://developers.google.com/maps/documentation/Android/intro
Sélectionnez Project > Properties
, sélectionnez Java Build Path
et accédez à Libraries
. Sélectionnez Add External Jars
, incluez les fichiers jar suivants, puis cliquez sur OK:
<Android-sdk-folder>/extras/Android/compatibility/v4/Android-support-v4.jar
Maintenant, mon projet ne montre plus d'erreur :)
J'ai aussi eu ce problème. J'ai fait Project/Clean et l'erreur a disparu et ça fonctionne bien maintenant.
J'ai le même problème aujourd'hui. J'ai mis à jour le SDK hier soir et je n'ai pas vu ce problème auparavant. J'ai également chargé le Android Exemple de projet de démonstration de Map V2 et le fichier "multimap_demo.xml" affiche l'erreur "Carte de préfixe d'espace de noms inattendue" trouvée pour le fragment de balise ". J'ai appliqué le xml inclure suggéré et cela fonctionne à nouveau. Donnerait un +1 mais n'a obtenu aucun crédit.
MISE À JOUR: J'ai oublié ce problème et j'ai retravaillé mon code aujourd'hui et supprimé l'inclusion. Bien sûr, l'erreur est revenue. J'ai trouvé cela et l'ai ajouté à la mise en page dans la strophe de fragment:
tools:ignore="MissingPrefix"
Cela semble au moins masquer le problème.
Mise à jour: ce bogue se produit apparemment en raison d'un bogue dans Android Lint Tool. Report issue https://code.google.com/p/gmaps-api-issues/issues/ détail? id = 5002
Il existe une autre solution de contournement qui vous permet de continuer à tout configurer dans les fichiers de disposition au lieu du code Java. Étant donné que l'erreur ne semble se produire que lorsque le SupportMapFragment
est un enfant de un ViewGroup
dans le fichier de mise en page, on peut extraire le <fragment>
élément dans son propre fichier de mise en page, puis il suffit de l'inclure dans la mise en page plus grande souhaitée.
Par exemple, étant donné que vous essayez de faire ceci:
my_awesome_layout.xml
...
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:map="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<fragment
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
class="com.google.Android.gms.maps.SupportMapFragment"
map:cameraBearing="112.5"/>
</RelativeLayout>
Vous pouvez plutôt le décomposer comme suit:
include_map_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:map="http://scheams.Android.com/apk/res-auto"
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
class="com.google.Android.gms.maps.SupportMapFragment"
map:cameraBearing="112.5"/>
my_awesome_layout.xml
...
<RelativeLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<include
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
layout="@layout/include_map_fragment" />
</RelativeLayout>
Eh bien, je sais, ce n'est pas vraiment une solution au problème d'espace de nom, peut-être que cela pourrait aider.
Comme je ne connais aucune solution XML, je l'ai fait par programmation:
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.setTrafficEnabled(true);
setupMapView();
private void setupMapView(){
UiSettings settings = mMap.getUiSettings();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(
new CameraPosition(new LatLng(50.0, 10.5),
13.5f, 30f, 112.5f))); // zoom, tilt, bearing
mMap.setTrafficEnabled(true);
settings.setAllGesturesEnabled(true);
settings.setCompassEnabled(true);
settings.setMyLocationButtonEnabled(true);
settings.setRotateGesturesEnabled(true);
settings.setScrollGesturesEnabled(true);
settings.setTiltGesturesEnabled(true);
settings.setZoomControlsEnabled(true);
settings.setZoomGesturesEnabled(true);
}
Ainsi, Google Map est initialisé par défaut mais obtient ses paramètres directement après cela à partir du code.
J'ai exactement le même problème. L'exemple fourni
<fragment xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:map="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/map"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
class="com.google.Android.gms.maps.SupportMapFragment"
map:cameraBearing="112.5"
map:cameraTargetLat="-33.796923"
map:cameraTargetLng="150.922433"
map:cameraTilt="30"
map:cameraZoom="13"
map:mapType="normal"
map:uiCompass="false"
map:uiRotateGestures="true"
map:uiScrollGestures="false"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true"/>
fonctionne bien, mais si vous essayez de l'ajouter dans un élément parent, il refuse d'accepter les xmlns. Si vous déplacez la déclaration xmlns vers l'élément supérieur, elle refuse toujours d'accepter le préfixe de carte dans le fragment:
Unexpected namespace prefix "map" found for tag fragment
Maintenant, si vous étendez SupportMapFragment et utilisez une vue personnalisée comme celle-ci:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:map="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:padding="5dp">
<com.google.Android.gms.maps.MapView
Android:id="@+id/map_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
map:cameraBearing="0"
map:cameraTargetLat="54.25"
map:cameraTargetLng="-4.56"
map:cameraTilt="30"
map:cameraZoom="5.6"
map:mapType="normal"
map:uiCompass="true"
map:uiRotateGestures="true"
map:uiScrollGestures="true"
map:uiTiltGestures="true"
map:uiZoomControls="false"
map:uiZoomGestures="true">
</com.google.Android.gms.maps.MapView>
</LinearLayout>
... alors il ne se plaint pas et la carte résultante est correcte. Pour moi, cela pose d'autres problèmes, car il n'y a pas d'exemples décents de la façon de faire ce sous-classement, vous devez faire plus que remplacer onCreateView et lorsque j'essaie de faire quoi que ce soit sur la carte par la suite, j'obtiens ce qui suit :
Java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view.
... même si j'attends 30 secondes après que la carte soit apparue. (seulement le premier chargement)
Je ne pense pas que vous puissiez mettre des commentaires XML à l'intérieur une balise comme vous le faites avec <!-- Definition -->
. Si vous supprimez cela, le problème persiste-t-il?
Dans mon cas une grosse miss, j'oublie d'ajouter dans le fichier gradle ma dépendance google map:
compile 'com.google.Android.gms:play-services-maps:11.2.0'
De toute évidence, ce n'est qu'une erreur de vérification des peluches. Vous pouvez le supprimer lorsque, dans la vue Eclipse Vue problème, vous cliquez avec le bouton droit sur la ligne contenant l'erreur, sélectionnez l'option Correction rapide et sélectionnez par ex. Ignorer la vérification du projet.
L'erreur disparaît, le projet se construit et l'application fonctionne parfaitement bien.