Android で画面のピクセル数を知りたい覚書 (疑問)

2020-11-16

Android の画面のピクセル数を知りたい。
Context は使ってよいものとする。

Android の画面のピクセル数と言っても、ステータスバー (画面最上部) やタイトルバー (画面上部) やナビゲーションバー (画面下部) を含めるかどうかで色々あるようだが、ここでは最も単純に画面自体のピクセル数でよいものとする。
特に自分が知りたいのは横幅。

やり方が分からなかったので、「Android ディスプレイ サイズ 取得」などで Google 検索してみると、WindowManager を使えとか、Point 型の変数が必要とか、そして DisplayMetrics を使えとか、それでも一旦変数に代入が必要とか、参考にはなるものの (前述の何々バーについても)、複雑な方法ばかりほぼ出てくるのだが..

[Android] スクリーンサイズを取得する
Android 画面サイズ取得方法 - Qiita
Androidの画面サイズを取得する方法まとめ|toconakis.tech
画面サイズを取得する|Android開発 | IT底辺脱却ブログ
Androidの画面サイズを攻略して機種依存を吸収する(ナビゲーションバーとステータスバーのサイズを取得する) | TechBooster
画面解像度などディスプレイの情報を取得する方法 - [Androidアプリ/Android] ぺんたん info
Android ディスプレイのサイズを取得 | Professional Programmer
【Android】画面サイズ、ビューのサイズを取得する方法 | 桜花満開/テンシホタル
画面の幅・高さの取得 | Android-Note

たかが画面のピクセル数を取得するのに、そんなに面倒な手順が必要なんだろうか?
何処かに定数か何かで保持していて、それを見るだけでよいと想像していたのだが..

それでも、displaymetrics がそれに近いような気がしてきたので、ふと「displaymetrics」で Google 検索してみると、DisplayMetrics の Android 公式ドキュメントが出てきたので、それを見てみると、

DisplayMetrics  |  Android Developers

わりと上の方に、以下のような記述があった。

To access the DisplayMetrics members, retrieve display metrics like this:
context.getResources().getDisplayMetrics();

そして、DisplayMetrics には public int widthPixels というフィールドがある。
The absolute width of the available display size in pixels. とのことであり、 Added in API level 1 である。

これを参考にすると、以下のように一行記述するだけで、中間変数も使わずストレートに、それらしい横幅の値を取得することが出来た。 (context は Context を保持している)

context.getResources().getDisplayMetrics().widthPixels

実際には、自分の場合、使用箇所は LinearLayout を継承したクラス内であり (そして LinearLayout ← ViewGroup ← View と継承しているので)、 以下のようにすれば、context の明示的な指定も不要だった。 (この getResources() は View のメソッド)

getResources().getDisplayMetrics().widthPixels

この方法でピクセル数を取得しているページも見かけたような気がしたのだが.. いま探しても見つからない。

あれだけ多くのページで、この単純な手法を用いていないのは何故なんだろうか。 自分は何か見落としているのだろうか.. (疑問)

以上


index