web-dev-qa-db-ja.com

Android xmlのGoogle Mapsフラグメント。「予期しない名前空間プレフィックス」が表示されます。

私はAndroidを習おうとしていますが、Google Maps API V.2の使用方法の指示に従って作業を進めています。ただし、 developers.google.com にあるマップの初期状態を構成する方法の指示では、xmlファイルで定義されているネームスペース(この場合は「マップ」)が提案されています。

以下のxml-codeはmedエラー "Unexpected namespace namespace prefix" map ""を提供します。 fragmentタグ内でxmlns:mapを定義しようとすると、同じエラーが "xmlns"で発生しました。

ここで明らかに基本的なxml-knowledgeが欠落していますが、誰かが私を助けてくれますか?

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

次の2つのことを行う必要があります。

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

Google Play Servicesへの依存関係をプロジェクトに追加します

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

2番目: https://developers.google.com/maps/documentation/Android/intro

選択する Project > Properties、 選択する Java Build PathLibrariesに移動します。選択する Add External Jars、次のjarファイルを含め、[OK]をクリックします。

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

これで私のプロジェクトにはエラーが表示されなくなりました:)

20
marcel

私もこの問題を抱えていました。 Project/Cleanを実行しましたが、エラーはなくなり、問題なく動作しました。

26
Kent

今日も同じ問題があります。昨夜、SDKをアップグレードしましたが、以前はこの問題は発生しませんでした。 Android Map V2サンプルデモプロジェクトもロードされていましたが、今日、 "multimap_demo.xml"ファイルに "タグフラグメントに予期しない名前空間プレフィックス" map "が見つかりました"エラーが表示されます。xmlを適用しました提案を含めると、再び機能します。+ 1を与えますが、信用は得られません。

更新:この問題を忘れて、今日コードを作り直し、インクルードを削除しました。もちろん、エラーが戻ってきました。これを見つけて、フラグメントスタンザのレイアウトに追加しました。

tools:ignore="MissingPrefix"

少なくとも問題を隠しているようです。

更新:このバグは、明らかにAndroid Lint Toolのバグが原因で発生しています。問題を参照してください https://code.google.com/p/gmaps-api-issues/issues/ detail?id = 5002

19
WigglyWorld

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>
13
Scott W

まあ、これは実際には名前空間の問題の解決策ではありません。おそらくこれが役立つかもしれません。

私は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マップはデフォルトで初期化されますが、そのパラメーターはコードから直接取得されます。

4
Tobias Reich

私はまったく同じ問題を抱えています。提供された例

<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秒待っても(最初の読み込みのみ)

3
colesadam

XMLコメントを挿入できるとは思わないinside<!-- Definition -->で行っているようなタグ。削除しても問題は発生しますか?

1
Matt

私の場合、大きなミスで、Googleマップの依存関係をgradleファイルに追加するのを忘れています:

compile 'com.google.Android.gms:play-services-maps:11.2.0'
0
Pablo Cegarra

明らかにこれは単なる誤解を招くリントチェックエラーです。 Eclipseの問題ビューでエラーのある行を右クリックし、クイックフィックスオプションを選択して、たとえばプロジェクトのチェックを無視

エラーはなくなり、プロジェクトがビルドされ、アプリは完全に実行されます。

0
Ridcully