我有完全相同的问题。提供的示例
<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 秒。(仅第一次加载)