Невидимая мягкая панель навигации на некоторых устройствах - PullRequest
0 голосов
/ 05 июня 2018

Я хочу знать, имеет ли устройство мягкую панель навигации.Для этой цели я использую следующий код:

        val hasNavBar = resources.getIdentifier("config_showNavigationBar", "bool", "android")
        if(hasNavBar > 0 && resources.getBoolean(hasNavBar)){

            val resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android")
            if (resourceId > 0) {
                ApiHelper.navHeight = resources.getDimensionPixelSize(resourceId)
            }
        }

Но на некоторых устройствах, у которых нет мягкой навигационной панели, resources.getDimensionPixelSize(resourceId) дает некоторую высоту, а hasNavBar имеет значение true.

Устройствос этой проблемой Redmi Note 4 Pro.Я не знаю, есть ли у других устройств такая же проблема.

enter image description here

1 Ответ

0 голосов
/ 05 июня 2018

Я нашел ответ.

В stackOverflow есть некоторые функции, которые не работают, но это сработало.

Как определить, есть ли на устройстве Android жесткие клавиши

fun hasSoftKeys(windowManager: WindowManager): Boolean {
        var hasSoftwareKeys = true

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
            val d = context.getWindowManager().getDefaultDisplay()

            val realDisplayMetrics = DisplayMetrics()
            d.getRealMetrics(realDisplayMetrics)

            val realHeight = realDisplayMetrics.heightPixels
            val realWidth = realDisplayMetrics.widthPixels

            val displayMetrics = DisplayMetrics()
            d.getMetrics(displayMetrics)

            val displayHeight = displayMetrics.heightPixels
            val displayWidth = displayMetrics.widthPixels

            hasSoftwareKeys = realWidth - displayWidth > 0 || realHeight - displayHeight > 0x<
        } else {
            val hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey()
            val hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK)
            hasSoftwareKeys = !hasMenuKey && !hasBackKey
        }
        return hasSoftwareKeys
    }
...