private const val RES_NAME_NAV_BAR = "navigationBarBackground"
private val Context.navBarResId
get() = resources.getIdentifier(
"navigation_bar_height",
"dimen", "android"
)
/**
* 獲取虛擬導航欄的高度,必須在佈局繪製完成之後調用才能獲取到正確的值(可以在onWindowFocusChanged()中調用)
* 單位為px
*/
val Context.navBarHeight: Int
get() {
val resourceId = navBarResId
return if (resourceId != 0) {
resources.getDimensionPixelSize(resourceId)
} else 0
}
/**
* 手機是否有虛擬導航欄
*/
val Context.hasNavBar
@JvmName("hasNavBar")
get() = navBarResId != 0
/**
* 當前虛擬導航欄是否顯示
*/
val Activity.isNavBarShowed: Boolean
get() {
val viewGroup = window.decorView as ViewGroup? ?: return false
return (0 until viewGroup.childCount).firstOrNull {
viewGroup.getChildAt(it).id != View.NO_ID
&& this.resources.getResourceEntryName(viewGroup.getChildAt(it).id) == RES_NAME_NAV_BAR
} != null
}