2020-11-16
Android の画面のピクセル数を知りたい。
Context は使ってよいものとする。
Android の画面のピクセル数と言っても、ステータスバー (画面最上部)
やタイトルバー (画面上部) やナビゲーションバー (画面下部)
を含めるかどうかで色々あるようだが、ここでは最も単純に画面自体のピクセル数でよいものとする。
特に自分が知りたいのは横幅。
やり方が分からなかったので、「Android ディスプレイ サイズ 取得」などで Google 検索してみると、WindowManager を使えとか、Point 型の変数が必要とか、そして DisplayMetrics を使えとか、それでも一旦変数に代入が必要とか、参考にはなるものの (前述の何々バーについても)、複雑な方法ばかりほぼ出てくるのだが..
たかが画面のピクセル数を取得するのに、そんなに面倒な手順が必要なんだろうか?
何処かに定数か何かで保持していて、それを見るだけでよいと想像していたのだが..
それでも、displaymetrics がそれに近いような気がしてきたので、ふと「displaymetrics」で Google 検索してみると、DisplayMetrics の Android 公式ドキュメントが出てきたので、それを見てみると、
わりと上の方に、以下のような記述があった。
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
この方法でピクセル数を取得しているページも見かけたような気がしたのだが.. いま探しても見つからない。
あれだけ多くのページで、この単純な手法を用いていないのは何故なんだろうか。 自分は何か見落としているのだろうか.. (疑問)