1. ホーム
  2. android

[解決済み] Androidで画面の大きさをピクセル単位で取得する方法

2022-03-18 14:22:56

質問

カスタム要素をいくつか作成したのですが、それらをプログラムによって右上に配置したいのです ( n ピクセル、上端から m 右端から1ピクセル)。したがって、画面の幅と高さを取得してから、位置を設定する必要があります。

int px = screenWidth - m;
int py = screenHeight - n;

どうすれば screenWidthscreenHeight をメインアクティビティで使用しますか?

解決方法は?

表示寸法をピクセル単位で知りたい場合は getSize :

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

もし、あなたが Activity を使用すると、デフォルトの Display を経由して WINDOW_SERVICE :

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();

フラグメントの中でこれを実現したい場合は、Activity.WindowManager (in Xamarin.Android) または getActivity().getWindowManager() (in java) を使ってください。

以前 getSize が導入されたとき (APIレベル13) は getWidthgetHeight メソッドがありますが、現在では非推奨となっています。

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

しかし、あなたが説明している使用例では、レイアウトのマージン/パディングがより適切であると思われます。

別の方法としては ディスプレイメトリクス

<ブロッククオート

ディスプレイのサイズ、密度、フォントのスケーリングなど、ディスプレイに関する一般的な情報を記述した構造体です。DisplayMetricsのメンバにアクセスするには、次のようにオブジェクトを初期化します。

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

を使用することができます。 widthPixels の情報を取得することができます。

"ディスプレイの絶対幅をピクセル単位で指定します。

Log.d("ApplicationTagName", "Display width in px is " + metrics.widthPixels);

APIレベル30アップデート

final WindowMetrics metrics = windowManager.getCurrentWindowMetrics();
 // Gets all excluding insets
 final WindowInsets windowInsets = metrics.getWindowInsets();
 Insets insets = windowInsets.getInsetsIgnoreVisibility(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);