WindowMetricsCalculator

public interface WindowMetricsCalculator


An interface to calculate the WindowMetrics for an Activity or a UiContext.

Summary

Public methods

abstract @NonNull WindowMetrics

Computes the size and position of the area the window would occupy with MATCH_PARENT width and height and any combination of flags that would allow the window to extend behind display cutouts.

default @NonNull WindowMetrics

Computes the size and position of the area the window would occupy with MATCH_PARENT width and height and any combination of flags that would allow the window to extend behind display cutouts.

abstract @NonNull WindowMetrics

Computes the maximum size and position of the area the window can expect with MATCH_PARENT width and height and any combination of flags that would allow the window to extend behind display cutouts.

default @NonNull WindowMetrics

Computes the maximum size and position of the area the window can expect with MATCH_PARENT width and height and any combination of flags that would allow the window to extend behind display cutouts.

default static final @NonNull WindowMetricsCalculator

Public methods

computeCurrentWindowMetrics

Added in 1.0.0
abstract @NonNull WindowMetrics computeCurrentWindowMetrics(@NonNull Activity activity)

Computes the size and position of the area the window would occupy with MATCH_PARENT width and height and any combination of flags that would allow the window to extend behind display cutouts.

For example, android.view.WindowManager.LayoutParams.layoutInDisplayCutoutMode set to android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS or the android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS flag set.

The value returned from this method may be different from platform API(s) used to determine the size and position of the visible area a given context occupies. For example:

  • Display.getSize can be used to determine the size of the visible area a window occupies, but may be subtracted to exclude certain system decorations that always appear on screen, notably the navigation bar.

  • The decor view's android.view.View#getWidth and android.view.View@getHeight can be used to determine the size of the top level view in the view hierarchy, but this size is determined through a combination of android.view.WindowManager.LayoutParams flags and may not represent the true window size. For example, a window that does not indicate it can be displayed behind a display cutout will have the size of the decor view offset to exclude this region unless this region overlaps with the status bar, while the value returned from this method will include this region.

The value returned from this method is guaranteed to be correct on platforms Q and above. For older platforms the value may be invalid if the activity is in multi-window mode or if the navigation bar offset can not be accounted for, though a best effort is made to ensure the returned value is as close as possible to the true value. See .computeWindowBoundsP and .computeWindowBoundsN.

Note: The value of this is based on the last windowing state reported to the client.

computeCurrentWindowMetrics

Added in 1.1.0
default @NonNull WindowMetrics computeCurrentWindowMetrics(@UiContext @NonNull Context context)

Computes the size and position of the area the window would occupy with MATCH_PARENT width and height and any combination of flags that would allow the window to extend behind display cutouts.

On Build.VERSION_CODES.Q and older, a UiContext is either an Activity or an InputMethodService. On Build.VERSION_CODES.R and newer, a UiContext can also be one created via the Context.createWindowContext APIs.

Throws
kotlin.NotImplementedError

if not implemented. The default implementation from getOrCreate is guaranteed to implement this method.

computeMaximumWindowMetrics

Added in 1.0.0
abstract @NonNull WindowMetrics computeMaximumWindowMetrics(@NonNull Activity activity)

Computes the maximum size and position of the area the window can expect with MATCH_PARENT width and height and any combination of flags that would allow the window to extend behind display cutouts.

The value returned from this method will always match Display.getRealSize on Android 10 and below.

computeMaximumWindowMetrics

Added in 1.1.0
default @NonNull WindowMetrics computeMaximumWindowMetrics(@UiContext @NonNull Context context)

Computes the maximum size and position of the area the window can expect with MATCH_PARENT width and height and any combination of flags that would allow the window to extend behind display cutouts.

The value returned from this method will always match Display.getRealSize on Android 10 and below.

On Build.VERSION_CODES.Q and older, a UiContext is either an Activity or an InputMethodService. On Build.VERSION_CODES.R and newer, a UiContext can also be one created via the Context.createWindowContext APIs.

Throws
kotlin.NotImplementedError

if not implemented. The default implementation from getOrCreate is guaranteed to implement this method.

getOrCreate

Added in 1.0.0
default static final @NonNull WindowMetricsCalculator getOrCreate()