Android Studio 谷歌地图 V2 片段渲染

43

我在Android Studio中尝试编写Google Map V2的测试演示。我按照Androidhive Google Map V2中的每个步骤进行,或者更好的说,我认为我需要这样做。

我正在使用相同的layout_main.xml文件。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

但我一直遇到相同的渲染问题:

渲染问题
<fragment> 标签允许布局文件在运行时动态包含不同的布局。在布局编辑时无法确定要使用的特定布局。您可以选择在编辑布局时预览要使用的布局...

我完全不知道问题出在哪里。我是否忘记了什么? 我只需要像这样在 build.gradle 中添加 Google 服务:

compile 'com.google.android.gms:play-services:4.4.52'

我从演示文稿中复制了清单(manifest)并更改了API密钥。


这个答案对我有用:https://dev59.com/JGAg5IYBdhLWcg3wLYaI#45307527。简而言之,只需将此代码行添加到您的片段中 tools:layout="@android:layout/simple_gallery_item - Lance Samaria
4个回答

76

这个被接受的答案并没有错,但也没有帮到你。
就像Dan写的那样,Android Studio(1.0版本也是如此)不会显示地图。
地图需要API密钥和动态处理的代码,或许有一天我们会有,但目前还没有。
对于那些想在布局预览中正确看到他们的应用程序的人,我有一个五分钟的解决方案:
enter image description here

为了能够正确开发,我仍然需要比空白背景更多的东西。
我在地图上添加了覆盖层和按钮,我真的需要在放置元素时看到地图。
解决方案很简单:
1. 使用Power + Volume Down组合键截取您的应用程序与地图运行的屏幕截图
2. 下载该截图并使用图像编辑器删除顶部和底部的UI元素,这样您最终只会得到地图本身的图像。
3. 将该图像导入到Android Studio的drawable文件夹中
4. 创建一个新布局,将其命名为dummy_mapviewfragment,其中只包含一个线性布局和一个ImageView
5. 让ImageView“填充”父视图,并将“src”设置为您刚刚导入的裁剪图像
6. 返回到您的布局,将以下内容添加到您的MapView Fragment xml:

 tools:layout="@layout/dummy_mapviewfragment"/>

就这样,现在你将拥有一个非交互式的地图视图片段,它会显示一个真正的地图。
你的应用程序将看起来像在你的手机上一样。 如果你在图片裁剪中出现错误,你可以通过设置图片比例为“centerCrop”来“修复”,这样它就会正确地拉伸。

更新:你可以直接在Android Studio中获取屏幕截图而不需要进行裁剪!这使得它更加方便 ;)


1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Big Rich
@John 在完成后,你是将按钮添加到 dummy_mapviewfragment 吗?当我尝试将它们添加到 mapview 时,仍然会出现无法添加它们的 X 字形光标。 - USer22999299
1
这是超越常规思维的想法。 - Jay Donga
Android Studio的新版本(2.1)将为您建议布局(通常是正确的)。但有时它使用layout="@layout\some_layout",有时使用tools:layout="@layout\some_layout",有时两者都用。您明白其中的区别吗?我仍在努力学习所有新的Material Design XML标签。 - SMBiggs
除了地图之外,如果您想在不在模拟器中运行应用程序的情况下预览任意“Fragment”布局,则此答案也适用。 - aroth
显示剩余3条评论

50
渲染问题
<fragment> 标签允许在运行时动态包含不同的布局文件。在布局编辑时,不知道要使用哪个特定的布局。您可以选择在编辑布局时预览要使用的布局...
这只是预览窗口向您发出的信息,说明它无法为 <Fragment.../> 标签显示预览,因为它不知道您将放置哪种片段。您可以安全地忽略该消息-只要编写正确,您的实际应用程序在运行时将能够正常呈现该片段!

4

添加一个虚拟布局"@android:layout/simple_gallery_item",如下:

<fragment
    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"
    android:layout_width="317dp"
    android:layout_height="385dp"
    android:id="@+id/map"
    tools:context="com.example.XYZ.googlemaps.MapsActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    tools:layout="@android:layout/simple_gallery_item"/>

4
Android Studio会在错误描述中自动提供一种解决方案,即添加Fragment布局的名称。

tools:layout="@layout/fragment_my"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接