Android Google Maps fragment in the xml. I get "Unexpected namespace prefix"

31,765

Solution 1

You have to do two things:

First: https://docs.google.com/document/pub?id=19nQzvKP-CVLd7_VrpwnHfl-AE9fjbJySowONZZtNHzw

Add the dependency to Google Play Services into your project

Project -> Properties -> Android -> Library, Add -> google-play-services_lib

Second: https://developers.google.com/maps/documentation/android/intro

Select Project > Properties, select Java Build Path, and navigate to Libraries. Select Add External Jars, include the following jar files, and click OK:

<android-sdk-folder>/extras/android/compatibility/v4/android-support-v4.jar

Now my project shows no errors anymore :)

Solution 2

I had this problem as well. I did Project/Clean and the error went away and it works fine now.

Solution 3

I have the same problem today. I upgraded the SDK last night and did not see this problem before. I had the Android Map V2 sample demo project loaded too and today the "multimap_demo.xml" file is showing the "Unexpected namespace prefix "map" found for tag fragment" error. I applied the xml include suggested and it is working again. Would give it a +1 but got no cred.

UPDATE: I forgot about this problem and reworked my code today and removed the include. Of course the error came back. I found this and added it to the layout in the fragment stanza:

tools:ignore="MissingPrefix"

It seems to at least mask the problem.

Update: This bug apparently happens due to a bug in Android Lint Tool. Refer issue https://code.google.com/p/gmaps-api-issues/issues/detail?id=5002

Solution 4

There is another workaround that lets you continue to set everything up in layout files instead of in the Java code. Since the error only seems to happen when the SupportMapFragment is a child of a ViewGroup in the layout file, one can extract the <fragment> element into its own layout file and then just include it in the desired larger layout.

For example, given that you are trying to do this:

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>

You could instead break it up like so:

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>

Solution 5

Well, I know, this isn't really a solution for the name space problem, maybe this might help.

Since I don't know any XML solution, I did it programmatically:

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

So the Google Map is initialized default but gets its parameters directly after that from the code.

Share:
31,765
Alex
Author by

Alex

Updated on December 18, 2020

Comments

  • Alex
    Alex over 3 years

    I'm trying to learn android, and having followed the instructions on how to use the Google Maps API V.2 I now got it working. However, the instructions on how to configure the initial state of the maps, found at developers.google.com, suggests a namespace defined in the xml-file, in this case "map".

    The xml-code below gives med the error "Unexpected namespace prefix "map"". Trying to define the xmlns:map inside the fragment tag gave the same error but with "xmlns".

    I'm obviously missing some fundamental xml-knowledge here, can someone help me out?

    <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>
    
  • Alex
    Alex about 11 years
    Yes, I added the comments afterwards in order to try and explain the problem. I haven't tried the code with the comments in it, you may be right. Thank you for taking your time though!
  • Alex
    Alex about 11 years
    We seem indeed to be sitting in the same boat. I moved on to doing it in the java-code. Thanks for the response, I will try out the custom view.
  • Tobias Reich
    Tobias Reich about 11 years
    And funny enough, if you define any other namespace they seem to work. Like I needed xmlns:tools="schemas.android.com/tools" for my Context.
  • Indrek Kõue
    Indrek Kõue about 11 years
    I still keep receiving: 'error: No resource identifier found for attribute {xmlParam} in package {packagename}'. Weird thing is that, I remember committing working code to my repo 3-4 months ago and when I tried to compile it few days ago, I kept getting the same error as original poster.
  • Sofi Software LLC
    Sofi Software LLC almost 11 years
    This is the right solution. Note that for Android Studio, add google-play-services_lib as a module dependency.
  • Rob
    Rob almost 11 years
    I only use eclipse for Android, I've never understood why it doesn't does clean up after itself automatically. Cleaning only works until you edit the XML file again then the problem recurs
  • Snake
    Snake over 9 years
    @Rob did you figure out how to not get the error everytime. I have to clean all the time
  • Rob
    Rob over 9 years
    @Snake unfortunately not, I haven't done much work with google maps api of late so I can't really help, sorry. I did however switch to using Android Studio