ディスプレイ周りの各種サイズの取得
ステータスバーやナビゲーションバーなど、
画面関係のサイズや座標を取得します。
activity
引数には、Activity
から呼び出す時はthis
を指定すればOKです。
ディスプレイサイズの取得
fun getRealDisplaySize(activity: Activity): Point { val outSize = Point() if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) activity.display?.getRealSize(outSize) else activity.windowManager.defaultDisplay.getRealSize(outSize) return outSize }
物理的な画面サイズです。
アプリケーションエリアのサイズ
fun getApplicationDisplaySize(activity: Activity): Point { return Point( activity.resources.displayMetrics.widthPixels, activity.resources.displayMetrics.heightPixels ) }
ディスプレイサイズからナビゲーションバーを除いた大きさです。
アプリケーション表示エリア
fun getApplicationVisibleArea(activity: Activity): Rect { val outRect = Rect() activity.window.decorView.getWindowVisibleDisplayFrame(outRect) //アプリケーション表示エリア(バーの状態によって変化する) return outRect }
ステータスバーとナビゲーションバーを除いた範囲の座標です。
この値は、フルスクリーンモードでは画面全体の座標に変化します。
ステータスバーの高さ
fun getStatusBarHeight(activity: Activity): Int { val resourceId = activity.resources.getIdentifier("status_bar_height", "dimen", "android") return if (resourceId > 0) activity.resources.getDimensionPixelSize(resourceId) else { val rect = getApplicationVisibleArea(activity) rect.top } }
テストした範囲では、フルスクリーンモードでも正しい値が取得できています。
タイトルバー(ActionBar)の高さ
fun getActionBarHeight(activity: Activity): Int { val styledAttr: TypedArray = activity.theme.obtainStyledAttributes(intArrayOf(R.attr.actionBarSize)) val px = styledAttr.getDimension(0, 0f).toInt() styledAttr.recycle() return px }
ToolBar
で機能するかどうかは確認していません。
ナビゲーションバーの高さ
fun getNavigationBarHeight(activity: Activity): Int { val real = getRealDisplaySize(activity) //スクリーンサイズ val app = getApplicationDisplaySize(activity) //アプリケーション表示エリア return real.y - app.y }