いくつかのカスタム要素を作成し、プログラムでそれらを右上隅 (n
上端からピクセル、m
右端からピクセル) に配置したいと思います。そのため、画面の幅と高さを取得して位置を設定する必要があります。
int px = screenWidth - m;
int py = screenHeight - n;
メインアクティビティにアクセスするにscreenWidth
はどうすればよいですか?screenHeight
ベストアンサー1
APIレベル30の場合、WindowMetrics.getBounds
を使用します。使用例については、リンク先のドキュメントをご覧ください。
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);
古い回答:
ピクセル単位で表示サイズを知りたい場合は、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 (Xamarin.Android の場合) または getActivity().getWindowManager() (Java の場合) を使用します。
が導入される前getSize
(API レベル 13)は、現在は非推奨となっている メソッドgetWidth
とメソッドを使用できました。getHeight
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);