显示地图
将 Google Maps 添加到您的应用
显示地图 是 CoddyKit 上的免费 Android Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。
将应用放到地图上
地图可以将原始坐标转化为用户能够查看和探索的内容。本课将使用官方的 maps-compose 库,将交互式谷歌地图添加到 Jetpack Compose 屏幕中。
学完本课后,您将能够在任意可组合项中放置真实的、可平移和缩放的地图。现在,让我们准备好所需的基础组件。
Maps Compose 库
Google 提供了一个适用于 Compose 的封装库,名为 maps-compose。它提供了 GoogleMap 可组合项,因此您无需再直接操作旧版 XML MapView。
将这些依赖项添加到模块的 build.gradle.kts 中。play-services-maps 是底层 SDK,maps-compose 则负责将其适配到 Compose。
// build.gradle.kts (module)
dependencies {
implementation("com.google.maps.android:maps-compose:6.1.0")
implementation("com.google.android.gms:play-services-maps:19.0.0")
}获取 API 密钥
Google 地图需要API 密钥。请在 Google Cloud Console 中创建密钥,启用 Maps SDK for Android,然后将密钥放入 AndroidManifest.xml 的 <application> 标签中。
切勿将密钥硬编码在公开提交的源代码中。请将其存储在 local.properties 中,并通过清单占位符注入。
<!-- AndroidManifest.xml, inside <application> -->
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${MAPS_API_KEY}" />您的第一个 GoogleMap
最简单的地图就是一个 GoogleMap 可组合项。为它设置 Modifier.fillMaxSize() 后,您就能立即获得可平移和缩放的地图。
它不需要任何子项即可显示——只要 API 密钥有效,Google 的地图图块就会自动渲染。
import com.google.maps.android.compose.GoogleMap
@Composable
fun MapScreen() {
GoogleMap(
modifier = Modifier.fillMaxSize()
)
}控制摄像机
摄像机决定地图的观察位置以及缩放距离。您需要提供一个在多次重组之间保持不变的 CameraPositionState。
请根据 LatLng(纬度、经度)和缩放级别构建 CameraPosition。缩放级别越高,视图就越近。
import com.google.android.gms.maps.model.CameraPosition
import com.google.android.gms.maps.model.LatLng
import com.google.maps.android.compose.rememberCameraPositionState
val sanFrancisco = LatLng(37.7749, -122.4194)
val cameraPositionState = rememberCameraPositionState {
position = CameraPosition.fromLatLngZoom(sanFrancisco, 12f)
}将相机接入地图
将 cameraPositionState 传递给 GoogleMap,这样地图打开时就会以您希望的位置为中心。由于该状态会被记住,用户的平移和缩放操作在重组后仍会保留。
@Composable
fun CenteredMap() {
val sf = LatLng(37.7749, -122.4194)
val cameraPositionState = rememberCameraPositionState {
position = CameraPosition.fromLatLngZoom(sf, 12f)
}
GoogleMap(
modifier = Modifier.fillMaxSize(),
cameraPositionState = cameraPositionState
)
}地图属性
MapProperties 用于配置地图的显示内容。常见选项包括地图类型(普通、卫星、地形、混合),以及是否启用蓝色的我的位置圆点。
请记住这个属性对象,避免它在每次重组时都被重新创建。
import com.google.maps.android.compose.MapProperties
import com.google.maps.android.compose.MapType
val properties = remember {
MapProperties(
mapType = MapType.NORMAL,
isMyLocationEnabled = false
)
}地图界面设置
MapUiSettings 用于切换屏幕上的控件:缩放按钮、指南针、我的位置按钮和手势。
对于不需要的控件可以将其停用,让界面更加简洁——例如隐藏缩放按钮,但保留双指缩放手势。
import com.google.maps.android.compose.MapUiSettings
val uiSettings = remember {
MapUiSettings(
zoomControlsEnabled = false,
compassEnabled = true,
scrollGesturesEnabled = true,
zoomGesturesEnabled = true
)
}整合所有设置
将相机、属性和界面设置组合到一个已配置的地图中。这是生产环境地图界面通常采用的结构。
@Composable
fun ConfiguredMap() {
val sf = LatLng(37.7749, -122.4194)
val cameraPositionState = rememberCameraPositionState {
position = CameraPosition.fromLatLngZoom(sf, 12f)
}
val properties = remember { MapProperties(mapType = MapType.NORMAL) }
val uiSettings = remember { MapUiSettings(zoomControlsEnabled = false) }
GoogleMap(
modifier = Modifier.fillMaxSize(),
cameraPositionState = cameraPositionState,
properties = properties,
uiSettings = uiSettings
)
}响应地图点击
GoogleMap 提供了 onMapClick 等回调。您可以使用它们响应用户对地图的点击——例如获取用户选定的 LatLng。
将点击位置保存到状态中,这样界面就能对其做出响应。
@Composable
fun ClickableMap() {
var picked by remember { mutableStateOf<LatLng?>(null) }
GoogleMap(
modifier = Modifier.fillMaxSize(),
onMapClick = { latLng -> picked = latLng }
)
picked?.let { p ->
Text("Picked: ${p.latitude}, ${p.longitude}")
}
}生命周期由您自动处理
使用传统的 XML MapView 时,您必须手动转发每个生命周期事件。maps-compose 库会自动将地图接入组合生命周期。
这意味着不需要手动处理 onResume/onPause/onDestroy——这也是新界面优先使用 Compose API 的又一个理由。
快速检查
要控制地图的中心位置和缩放级别,您需要记住并传递给 GoogleMap 的组合状态对象是什么?
回顾
现在,您已经可以在 Compose 中放置真实的 Google 地图:
- 添加
maps-compose和play-services-maps,并在清单中配置 API 密钥。 - 使用
GoogleMap组合函数渲染地图。 - 使用
rememberCameraPositionState和CameraPosition设置地图的中心和缩放级别。 - 使用
MapProperties和MapUiSettings自定义地图,并通过onMapClick响应点击。
接下来:获取设备的实际位置,将地图中心移到用户所在位置。
常见问题解答
「显示地图」课时是免费的吗?
是的 — 「显示地图」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。
「显示地图」这节课中我会学到什么?
将 Google Maps 添加到您的应用 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Android Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「显示地图」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Android Academy 课中编写并运行代码吗?
能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。