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'