判断NavigationBar是否显示,获取屏幕高度

1.判断NavigationBar是否显示

首先看几组数据

vivo-X21A:        screenRealSize : 2280 , screenHeight : 2201, statusBar : 84, navigationBar : 126(Android9导航栏一键)

vivo-X21A:        screenRealSize : 2280 , screenHeight : 2075, statusBar : 84, navigationBar : 126 (Android9导航栏三键)
vivo-X21A:        screenRealSize : 2280 , screenHeight : 2201, statusBar : 84, navigationBar : 126  (Android9手势)

meizu:               screenRealSize : 1280 , screenHeight : 1280, statusBar : 44, navigationBar : 96 (Android6,物理导航栏)

huaWei-PTC10: screenRealSize : 2310 , screenHeight : 2208, statusBar : 102, navigationBar : 0   (隐藏nvg, Android10)

huawei-PTC10: screenRealSize : 2310 , screenHeight : 2090, statusBar : 102, navigationBar : 118 (显示nvg, Android10)

huawei-xx1:      screenRealSize : 1920 , screenHeight : 1808, statusBar : 72, navigationBar : 112  (显示nvg, Android9)

huawei-xx1:      screenRealSize : 1920 , screenHeight : 1920, statusBar : 72, navigationBar : 112 (隐藏nvg, Android9)

huawei-xx2:     screenRealSize : 1560 , screenHeight : 1422, statusBar : 54, navigationBar : 84 (显示nvg, Android9)

huawei-xx2:    screenRealSize : 1560 , screenHeight : 1506, statusBar : 54, navigationBar : 0 (隐藏nvg, Android9)

将就着看吧,可以发现,华为最近出的手机的screenHeight不包含statusBar和navigationBar的高度,导航栏不显示的时候,获取到的navigationBar高度也不一样。

而我手上的vivo手机就更奇葩了,居然出现screenHeight + statusBar > screenRealSize的情况 !!显然vivo这款手机的screenheight也是不包含statusBar的高度的。

而老机型的魅族,screenHeight = screenRealHeight, 这还是很好理解的。

总之,想要直接获取navigationBar的高度来判断是否显示了导航栏是不行的。因为市场上的定制系统是在是乱的不醒。

最后的办法:

val isNavigationBarShow: Boolean
        get() {
            val windowManager =
                appContext?.getSystemService(Context.WINDOW_SERVICE) as? WindowManager
            val display = windowManager?.defaultDisplay
            val size = Point()
            val realSize = Point()
            display?.getSize(size)
            display?.getRealSize(realSize)
            // 如果显示了NavigationBar, statusBarHeight < navigationBarHeight
            return realSize.y > size.y + statusBarHeight
        }

 

2.判断屏幕显示的高度,可见高度+statusBar的高度

val screenHeight: Int
        get() {
            val windowManager =
                appContext?.getSystemService(Context.WINDOW_SERVICE) as? WindowManager
            val display = windowManager?.defaultDisplay
            val realSize = Point()
            display?.getRealSize(realSize)
            return if (isNavigationBarShow) {
                realSize.y -  navigationBarHeight
            } else {
                realSize.y
            }
        }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章