添加KmlLayer至Google Maps后自定义InfoWindowAdapter失效问题求助
添加KmlLayer至Google Maps后自定义InfoWindowAdapter失效问题求助
我来帮你捋捋这个问题,大概率是KmlLayer加载时的内部操作干扰了自定义标记的信息窗口配置,给你几个实操性强的解决方案试试:
调整加载顺序,等KML层解析完成后再处理自定义标记
KmlLayer在解析和添加到地图的过程中,可能会对地图的标记系统做一些初始化或重置操作。你可以通过OnLayerParsedListener监听KML层的加载完成事件,等它完全解析好之后,再添加自定义标记并设置InfoWindowAdapter,这样能避免被KML层的加载过程覆盖配置:(childFragmentManager.findFragmentById(R.id.googleMap) as SupportMapFragment).getMapAsync { map -> map.clear() val content = resources.openRawResource(R.raw.carte) val layer = KmlLayer(map, content, context) layer.setOnLayerParsedListener { // 在这里添加所有自定义标记 // 然后设置InfoWindowAdapter map.setInfoWindowAdapter(GoogleMapWindow()) } layer.addLayerToMap() }检查自定义标记的Z轴层级
KML层的默认Z轴层级(z-index)可能比你的自定义标记高,导致用户点击时实际触发的是KML层的内容,而非你的自定义标记。给自定义标记设置更高的z-index,确保它显示在KML层上方:val marker = map.addMarker(MarkerOptions().position(yourLatLng)) marker.zIndex = 100f // 数值只要比KML层默认值高即可,默认一般为0确认InfoWindowAdapter的实现正确性
你给出的GoogleMapWindow示例代码里,TextView的初始化有问题——TextView的构造函数需要传入上下文参数,否则无法正确渲染。正确的实现应该是这样的:class GoogleMapWindow(private val context: Context) : InfoWindowAdapter { override fun getInfoWindow(marker: Marker): View { val textView = TextView(context) textView.text = "My custom marker text" // 可以额外设置一些样式,比如内边距、文字大小等 textView.setPadding(16, 16, 16, 16) return textView } override fun getInfoContents(marker: Marker): View? { // 如果getInfoWindow返回null,会调用这个方法,这里可以返回null或者自定义布局 return null } }另外要记得,
InfoWindowAdapter需要重写两个方法,如果你只实现了getInfoWindow,确保它返回的View是合法可渲染的,不然也会导致信息窗口不显示。
你可以先从调整加载顺序开始试,这个是最常见的解决思路,应该能解决大部分这类问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

