How to get screen dimensions as pixels in Android ?

To get screen dimensions in pixels on Android, use these methods depending on your use case and API level:

1. Using DisplayMetrics (All API Levels)

This method works for all versions of Android and provides the current app window size (excluding system UI like the status bar):

val windowManager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val displayMetrics = DisplayMetrics()

// For app window size (excluding system UI):
windowManager.defaultDisplay?.getMetrics(displayMetrics)

// For full screen size (including system UI):
windowManager.defaultDisplay?.getRealMetrics(displayMetrics)

val screenWidthPx = displayMetrics.widthPixels
val screenHeightPx = displayMetrics.heightPixels

2. Using WindowMetrics (API 30+)

For modern Android versions (API 30+), use WindowMetrics for accurate results:

val windowMetrics = context.getSystemService(WindowManager::class.java).currentWindowMetrics
val bounds = windowMetrics.bounds

val screenWidthPx = bounds.width()
val screenHeightPx = bounds.height()

3. Using Jetpack Compose

In Compose, use LocalConfiguration:

val configuration = LocalConfiguration.current
val screenWidthPx = configuration.screenWidthDp * configuration.densityDpi / 160f
val screenHeightPx = configuration.screenHeightDp * configuration.densityDpi / 160f

4. For Full Physical Screen Size

To get the physical screen resolution (ignoring software buttons/status bars):

val displayMetrics = Resources.getSystem().displayMetrics
val screenWidthPx = displayMetrics.widthPixels
val screenHeightPx = displayMetrics.heightPixels

Key Notes

  • Orientation Awareness:
  val isPortrait = configuration.orientation == Configuration.ORIENTATION_PORTRAIT
  val currentWidthPx = if (isPortrait) screenWidthPx else screenHeightPx
  • Multi-Window Mode: Use WindowMetrics (API 30+) for accurate results in split-screen mode.
  • Deprecated Methods: Avoid Display#getSize() and Display#getRealSize().

Example Usage

// Get full screen dimensions (API 30+)
fun getScreenSize(context: Context): Pair<Int, Int> {
    val windowManager = context.getSystemService(WindowManager::class.java)
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        val metrics = windowManager.currentWindowMetrics
        Pair(metrics.bounds.width(), metrics.bounds.height())
    } else {
        val displayMetrics = DisplayMetrics()
        windowManager.defaultDisplay?.getRealMetrics(displayMetrics)
        Pair(displayMetrics.widthPixels, displayMetrics.heightPixels)
    }
}

Output Comparison

MethodIncludes System UIMulti-Window AwareOrientation Aware
DisplayMetrics
WindowMetrics
Resources#display

Choose the method based on your target API level and whether you need to account for system UI elements. For modern apps targeting API 30+, WindowMetrics is recommended.

Leave a Reply

Your email address will not be published. Required fields are marked *