加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 检测导航栏可见性

发布时间:2020-12-15 02:20:14 所属栏目:Java 来源:网络整理
导读:我正在尝试检查导航栏的可见性.在三星Galaxy S8上,我可以切换导航栏的可见性. 我已经尝试了很多不同的方法来检查可见性,但它们都不适用于Galaxy S8. 一些例子:(它们将始终返回相同的值,无论它是显示还是隐藏) ViewConfiguration.get(getBaseContext()).hasPe
我正在尝试检查导航栏的可见性.在三星Galaxy S8上,我可以切换导航栏的可见性.

我已经尝试了很多不同的方法来检查可见性,但它们都不适用于Galaxy S8.

一些例子:(它们将始终返回相同的值,无论它是显示还是隐藏)

ViewConfiguration.get(getBaseContext()).hasPermanentMenuKey()总是返回false
KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK)始终返回false
KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME)始终返回true

即使通过计算导航栏高度(How do I get the height and width of the Android Navigation Bar programmatically?),它也无法工作.

解决方法

也许对某人有用.用户可以隐藏导航栏.所以,最好的方法是订阅此活动.有用.

object NavigationBarUtils {
    // Location of navigation bar
    const val LOCATION_BOTTOM = 0
    const val LOCATION_RIGHT = 1
    const val LOCATION_LEFT = 2
    const val LOCATION_NONE = 3

    fun addLocationListener(activity: Activity,listener: (location: Int) -> Unit) {
        ViewCompat.setOnApplyWindowInsetsListener(activity.window.decorView) { view,insets ->
            val location = when {
                insets.systemWindowInsetBottom != 0 -> LOCATION_BOTTOM
                insets.systemWindowInsetRight != 0 -> LOCATION_RIGHT
                insets.systemWindowInsetLeft != 0 -> LOCATION_LEFT
                else -> LOCATION_NONE
            }
            listener(location)
            ViewCompat.onApplyWindowInsets(view,insets)
        }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读