活动中使用的布局(适用于GoogleMap)

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/cl_map"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        <fragment
                android:id="@+id/fr_map"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".ui.activity.MapActivity" />

    </androidx.coordinatorlayout.widget.CoordinatorLayout>


在同一活动中,这是单击标记时创建小吃店的方式。

override fun onMarkerClick(p0: Marker?): Boolean {
    Snackbar.make(findViewById(R.id.cl_map), "Hello World", Snackbar.LENGTH_INDEFINITE).show()
    // finding android.R.id.content does not work either
    // Snackbar.make(findViewById(android.R.id.content), "Hello World", Snackbar.LENGTH_INDEFINITE).show()
    return false
}


这是屏幕截图和一些症状:
对于标记的初始点击:
android - Android:小吃栏未正确显示在SupportMapFragment顶部-LMLPHP
请注意黑色细线。那是小吃店。

但是,如果我单击地图正文中的任何地方而不是标记,则小吃店将变得正常。

android - Android:小吃栏未正确显示在SupportMapFragment顶部-LMLPHP

此外,如果将uiSettings.isMapToolbarEnabled设置为false,则默认工具栏将被隐藏,但小吃店将永远不会显示。无论我单击什么,我什至都看不到黑色的细线。

this.googleMap?.uiSettings?.isMapToolbarEnabled = false


一个类似的问题here
我从中获取屏幕快照的手机是Nexus5。原生Android 6.0.1,是Nexus 5可以支持的最新操作系统。

最佳答案

根本原因已被发现。在全屏模式下,小吃栏被SystemUI隐藏。可以很容易地复制此问题here

就我而言,这是导致问题的代码段

override fun onWindowFocusChanged(hasFocus: Boolean) {
    super.onWindowFocusChanged(hasFocus)
    if (hasFocus) hideSystemUI()
}

private fun hideSystemUI() {
    window.decorView.systemUiVisibility = (
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    // or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    // or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    // or View.SYSTEM_UI_FLAG_FULLSCREEN
                    // to hide the nav bar and status bar
                    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    or View.SYSTEM_UI_FLAG_FULLSCREEN)
}


如问题正文所述,无论用户如何单击或在何处单击,模式SYSTEM_UI_FLAG_IMMERSIVESYSTEM_UI_FLAG_IMMERSIVE_STICKY几乎始终隐藏小吃店。
第三个全屏模式(不带任何标志)为倾斜模式(GoogleDoc),仅通过第二次单击即可对用户提供有效的小吃店。通过显示SystemUI的状态栏和导航栏,来自用户的第一单击将作为从后仰模式返回的消耗。

因此,目前针对此问题的快速解决方案是禁用任一沉浸式标志。但是我对此不满意。将继续寻找更好的答案。

此外,我通过设置适当的z-index或LayoutParam在Stackoverflow上尝试了解决方案,但都没有达到我想要的效果:在沉浸式(粘性)全屏顶部显示小吃店。

更新20191102:
根据Material Design Guidelines,小吃店不被认为是显示过多文本的合适方法,也不建议使用图标。我应该依赖的正确UI组件是Bottom Sheet

08-17 02:19