【Android】アスペクト比率でサイズ指定する方法

スマホを操作する手 Android開発

経緯

お仕事で、画面上部のヘッダーを、アスペクト比「75:9」で作って欲しいと依頼されました。

iOSであれば、レイアウトの要素をアスペクト比でサイズ指定できます。

しかしAndroidでは出来ないため、やり方を検討してみました。

アスペクト比での指定方法

今回は、以下の条件で実装してみます。

僕

適宜、置き換えて参考にしてみてください!

  • 横は、画面幅
  • 縦は、横幅を75とした時、9となる比率で調整

つまり、縦:横=9:75 となります。

実装内容

横幅を基準として、縦を調整する実装をしていきます。

mTextViewは、高さ設定する例です。

ざっくり解説

WindowManager という、アプリと画面と疎通するためのインターフェースがあります。
これを使い、画面の情報を取得しています。

Display クラスの「getSize」メソッドで、画面のサイズを取得し、Point に代入しています。

この時、縦横(X,Y)をセットで返していることに注意しましょう。

そして、Point.x で、横幅を取得し、計算して、オブジェクトの横幅に代入しているわけです。

さらにざっくりしたまとめ

  • WindowManager で画面情報を取得
  • Displayクラスで横幅を取得
  • 計算してレイアウトオブジェクトにセットする!

計算式の解説

中学生で学習する「比例式」を使用しています。

$$x:y = 75:9$$

$$75y = 9x$$

$$y = \frac{9}{75}x$$

$$y = \frac{3}{25}x$$

xには、取得した横幅が代入されます。

僕

y(縦幅)を求めたい際は、
適宜、移項して計算してみてくださいね!

参考文献

Android 画面サイズ取得方法

【Android】いまさら聞けないdp入門

Androidで画面サイズを取得する方法

コード上で高さを数値で設定するときに、デバイス毎に高さが変わってしまう問題

Android Developers(Point)

Android Developers (Display #getSize)

タイトルとURLをコピーしました