WindowInsets를 사용하지 않고 RealSize에서 SystemUI의 높이를 찾고 있다면 Chromebook에서 힘들어집니다.
4243 단어 안드로이드Chromebook
꽤 어려운 코드입니다 만, 높이로 간주하고
getGlobalVisibleRect()
를 탐색 막대의 높이를 본다는 것입니다.val density = resources.displayMetrics.density
binding.root.doOnLayout {
val rect = Rect()
it.getGlobalVisibleRect(rect)
val point = Point()
windowManager.defaultDisplay.getRealSize(point)
binding.realSize.text =
"""
RealSize:
StatusBar: ${rect.top / density}dp
NavigationBar: ${(point.y - rect.bottom) / density}dp
""".trimIndent()
}
ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { _, insets ->
window.decorView.onApplyWindowInsets(insets.toWindowInsets())
binding.insets.text =
"""
Insets:
StatusBar: ${insets.systemWindowInsetTop / density}dp
NavigationBar: ${insets.systemWindowInsetBottom / density}dp
""".trimIndent()
insets
}
비교를 위해 WindowInsets 값도 표시합니다.
우선은 Kitkat에서의 실행, WindowInsets를 취급할 수 있는 것은 Lollipop 이후이므로 Insets는 표시되어 있지 않습니다만, StatusBar/NavigationBar의 높이가 취해지고 있네요
Android 11에서 실행하면 WindowInsets의 값과 일치합니다.
라고 하는 것으로, 어쩌면 아직 이런 코드가 남아 있는 어플도 있을지도 모르겠네요.
이제 Chromebook에서 실행해 봅시다.
네, 디스플레이의 RealSize는 물리 디스플레이의 크기이지만, 앱 영역은 윈도우화되어 있으므로 GlobalVisibleRect는 윈도우 내에서의 영역 정보라는 것으로, 디스플레이 사이즈로부터 윈도우의 컨텐츠 영역의 높이를 뺀 값으로 매우 큰 값입니다.
라고 하는 것으로, 제대로 WindowInsets사용하라는 이야기였습니다.
Reference
이 문제에 관하여(WindowInsets를 사용하지 않고 RealSize에서 SystemUI의 높이를 찾고 있다면 Chromebook에서 힘들어집니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryo_mm2d/items/0bac30d6f458405e7cdc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)