判斷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
            }
        }

 

 

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