How to get screen dimensions as pixels in Android
android, dimensions, layout, pixel, screen
Solution
For API Level 30, `WindowMetrics.getBounds` is to be used. An example of its usage can be found in the linked docs:
final WindowMetrics metrics = windowManager.getCurrentWindowMetrics();
// Gets all excluding insets
final WindowInsets windowInsets = metrics.getWindowInsets();
Insets insets = windowInsets.getInsetsIgnoringVisibility(WindowInsets.Type.navigationBars()
| WindowInsets.Type.displayCutout());
int insetsWidth = insets.right + insets.left;
int insetsHeight = insets.top + insets.bottom;
// Legacy size that Display#getSize reports
final Rect bounds = metrics.getBounds();
final Size legacySize = new Size(bounds.width() - insetsWidth,
bounds.height() - insetsHeight);
Old answer:
If you want the display dimensions in pixels you can use `getSize`:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
If you're not in an `Activity` you can get the default `Display` via `WINDOW_SERVICE`:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
If you are in a fragment and want to acomplish this just use Activity.WindowManager (in Xamarin.Android) or getActivity().getWindowManager() (in java).
Before `getSize` was introduced (in API level 13), you could use the `getWidth` and `getHeight` methods that are now deprecated:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
For the use case, you're describing, however, a margin/padding in the layout seems more appropriate.
Another way is: DisplayMetrics
A structure describing general information about a display, such as its size, density, and font scaling. To access the DisplayMetrics members, initialize an object like this:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
We can use `widthPixels` to get information for:
"The absolute width of the display in pixels."
Example:
Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);
Problem
I created some custom elements, and I want to programmatically place them to the upper right corner (`n` pixels from the top edge and `m` pixels from the right edge). Therefore I need to get the screen width and screen height and then set position: ``` int px = screenWidth - m; int py = screenHeight - n; ``` How do I get `screenWidth` and `screenHeight` in the main Activity?