Android のスクリーンサイズ / ナビゲーションバーサイズ を取得

はじめに

今回は、Androidのさまざまな画面サイズを取得するサンプルコードを紹介します。

取得方法

  • 青色の線が 画面サイズ(screenSize)
  • 黄色の線が アプリが表示されている画面サイズ(applicationScreenSize)
  • ピンク色の線が ナビゲーションバーサイズ(navigationBarSize)

f:id:QoopMk:20190924140744p:plain

/**
 * 画面全体のサイズ
 */
val Context.screenSize: Size
    get() {
        val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
        val display = windowManager.defaultDisplay
        val point = Point()
        display.getRealSize(point)
        return Size(point.x, point.y)
    }

/**
 * アプリが表示されている画面のサイズ
 */
val Context.applicationScreenSize: Size
    get() {
        val windowManager = getSystemService(Context.WINDOW_SERVICE) as WindowManager
        val display = windowManager.defaultDisplay
        val point = Point()
        display.getSize(point)
        return Size(point.x, point.y)
    }

/**
 * ナビゲーションバーのサイズ
 */
val Context.navigationBarSize: Size
    get() {
        val screenSize = screenSize
        val applicationScreenSize = applicationScreenSize
        return when {
            applicationScreenSize.height < screenSize.height -> {
                // 縦向き
                Size(applicationScreenSize.width, screenSize.height - applicationScreenSize.height)
            }
            applicationScreenSize.width < screenSize.width -> {
                // 横向き
                Size(screenSize.width - applicationScreenSize.width, applicationScreenSize.height)
            }
            else -> {
                // 表示されていない(フルスクリーンなど)
                Size(0, 0)
            }
        }
    }