Floating Action Button跳转Maps Activity崩溃及地图加载异常问题
问题排查方案
Floating Action Button(悬浮按钮)点击崩溃问题
先修正布局与逻辑中的错误项:
- 你当前的FAB控件未配置
android:id属性,后续无法在代码中绑定控件,先补上该属性:android:id="@+id/fab_open_map" - 你配置的
android:onClick="activity_maps"是崩溃高发点:该属性要求加载当前布局的Activity中必须存在签名完全匹配的public方法,方法名与属性值完全一致、仅接收一个View类型参数,只要方法名写错、参数不对、方法不是public、方法写在其他类里,点击就会直接抛出NoSuchMethodException导致崩溃。新手不推荐用这种方式绑定点击事件,直接在代码中设置监听更稳妥。 - 布局里冗余属性可以删掉:如果父布局是ConstraintLayout,
android:layout_gravity="bottom|end"不会生效;android:contextClickable不需要额外配置,默认即可;app:srcCompat当前引用的是启动图标资源,建议替换为对应地图功能的图标,不修正也不会触发崩溃,仅影响UI展示。
修正后的FAB布局参考:
<com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab_open_map" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:srcCompat="@drawable/ic_baseline_map_24" android:contentDescription="@string/title_activity_maps"/>
在对应Activity的onCreate生命周期方法中添加点击跳转逻辑,Kotlin参考:
findViewById<FloatingActionButton>(R.id.fab_open_map).setOnClickListener { // 替换为你自己的MapsActivity类名 startActivity(Intent(this, MapsActivity::class.java)) }
Java参考:
FloatingActionButton fab = findViewById(R.id.fab_open_map); fab.setOnClickListener(view -> { startActivity(new Intent(CurrentActivity.this, MapsActivity.class)); });
额外排查项:确认MapsActivity已经在AndroidManifest.xml中完成注册,未注册的Activity跳转时也会触发崩溃。
地图页仅显示角落谷歌Logo、无地图内容问题
按优先级逐个排查以下配置项:
- 检查API Key配置:在
AndroidManifest.xml的<application>节点下必须添加Maps的API Key元数据,格式如下:
申请API Key时,必须将当前运行包的包名、对应签名的SHA-1证书指纹添加到控制台的允许列表中:debug调试时要填debug签名的SHA-1,打正式发布包要填正式签名的SHA-1,匹配失败就无法加载地图瓦片。<meta-data android:name="com.google.android.geo.API_KEY" android:value="替换为你自己申请的有效Maps API Key"/> - 检查基础权限配置:在Manifest中添加必要权限,没有网络权限无法拉取地图资源:
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> - 检查地图控件布局:如果布局中
SupportMapFragment/MapView的约束写错、宽高被压缩为0,也会只露出角落的Logo,确认地图控件宽高设置为match_parent或者对应有效尺寸,约束配置完整。 - 检查网络环境:谷歌地图服务需要可正常访问谷歌服务器的网络环境,普通国内网络环境下无法拉取地图资源,也会出现该现象。
- 检查代码逻辑:确认在
onMapReady回调中正常拿到了GoogleMap实例,没有主动调用隐藏地图图层的相关方法。
内容的提问来源于stack exchange,提问作者kyles
相关产品推荐
相关产品推荐

