私は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>
次の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 Path
、Libraries
に移動します。選択する Add External Jars
、次のjarファイルを含め、[OK]をクリックします。
<Android-sdk-folder>/extras/Android/compatibility/v4/Android-support-v4.jar
これで私のプロジェクトにはエラーが表示されなくなりました:)
私もこの問題を抱えていました。 Project/Cleanを実行しましたが、エラーはなくなり、問題なく動作しました。
今日も同じ問題があります。昨夜、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
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コメントを挿入できるとは思わないinside<!-- Definition -->
で行っているようなタグ。削除しても問題は発生しますか?
私の場合、大きなミスで、Googleマップの依存関係をgradleファイルに追加するのを忘れています:
compile 'com.google.Android.gms:play-services-maps:11.2.0'
明らかにこれは単なる誤解を招くリントチェックエラーです。 Eclipseの問題ビューでエラーのある行を右クリックし、クイックフィックスオプションを選択して、たとえばプロジェクトのチェックを無視。
エラーはなくなり、プロジェクトがビルドされ、アプリは完全に実行されます。