Android Google Maps фрагмент в xml. Я получаю "неожиданный префикс пространства имен "

Я пытаюсь узнать Android, и следуя инструкциям о том, как использовать API Карт Google В. 2 теперь я получил это работает. Однако Инструкции о том, как настроить начальное состояние карт, находятся по адресуdevelopers.google.com, предлагает пространство имен, определенное в xml-файле, в данном случае "map".

xml-код ниже дает med ошибку "неожиданный префикс пространства имен "map"". Попытка определить xmlns: map внутри тег фрагмента дал ту же ошибку, но с "xmlns".

мне, очевидно, не хватает некоторых фундаментальных xml-знаний здесь, может кто-нибудь мне помочь?

<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>

9 ответов


вы должны сделать две вещи:

первый: https://docs.google.com/document/pub?id=19nQzvKP-CVLd7_VrpwnHfl-AE9fjbJySowONZZtNHzw

добавьте зависимость от сервисов Google Play в свой проект

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

У меня тоже была эта проблема. Я сделал Project / Clean, и ошибка ушла, и теперь она работает нормально.


У меня такая же проблема сегодня. Я обновил SDK прошлой ночью и не видел этой проблемы раньше. У меня был образец демонстрационного проекта Android Map V2, и сегодня " multimap_demo.xml "файл показывает" непредвиденный префикс пространства имен "карта" найдено для фрагмента тега " ошибка. Я применил предложенный xml include, и он снова работает. Дал бы ему +1, но не получил кред.

обновление: Я забыл об этой проблеме и переработал свой код сегодня и удалил include. Конечно ошибка вернулась. Я нашел это и добавил его в макет во фрагменте строфы:

tools:ignore="MissingPrefix"

кажется, по крайней мере, маскирует проблему.

Update: эта ошибка, по-видимому, происходит из-за ошибки в Android Lint Tool. См. выпуск https://code.google.com/p/gmaps-api-issues/issues/detail?id=5002


существует еще один обходной путь, который позволяет вам продолжать настраивать все в файлах макета вместо кода Java. Поскольку ошибка возникает только тогда, когда SupportMapFragment является ребенком ViewGroup в файле макета, можно извлечь <fragment> элемент в свой собственный файл макета, а затем просто включить его в нужный больших макета.

например, учитывая, что вы пытаетесь сделать это:

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>

вы могли бы вместо этого разбить его так:

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>

Ну, я знаю, это на самом деле не решение проблемы пространства имен, может быть, это может помочь.

поскольку я не знаю никакого решения XML, я сделал это программно:

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

таким образом, карта Google инициализируется по умолчанию, но получает свои параметры непосредственно после этого из кода.


у меня точно такая же проблема. Приведенный пример

<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"/>

работает нормально, но если вы пытаетесь добавить его в родительский элемент, он отказывается принимать xmlns. Если вы переместите объявление xmlns в верхний элемент, он все равно откажется принять префикс карты во фрагменте:

Unexpected namespace prefix "map" found for tag fragment

теперь, если вы расширяете SupportMapFragment и используете пользовательское представление, такое как это:

<?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>

...тогда он не жалуется, и результирующая карта верна. Для меня это однако, поскольку нет достойных примеров того, как сделать этот подкласс, вы должны сделать больше, чем переопределить onCreateView и когда я пытаюсь сделать что-нибудь на карту, затем я получаю следующее:

java.lang.IllegalStateException: Map size should not be 0. Most likely, layout has not yet occured for the map view.

...даже если я подожду 30 секунд после появления на карте.(только первая загрузка)


Я не думаю, что вы можете поместить XML-комментарии внутри тег, как вы делаете с <!-- Definition -->. Если вы удалите это, проблема все еще возникает?


очевидно, что это просто ошибка проверки корпии mis-lead. Вы можете удалить его, когда в Eclipse на щелкните правой кнопкой мыши на строке с ошибкой, выберите быстро исправить и выберите, например, игнорировать проверку для project.

ошибка уходит, проект строится, и приложение работает отлично.


в моем случае большой промах, я забыл добавить в файл gradle мою зависимость от карты google:

compile 'com.google.android.gms:play-services-maps:11.2.0'