経緯
お仕事で、画面上部のヘッダーを、アスペクト比「75:9」で作って欲しいと依頼されました。
iOSであれば、レイアウトの要素をアスペクト比でサイズ指定できます。
しかしAndroidでは出来ないため、やり方を検討してみました。
アスペクト比での指定方法
今回は、以下の条件で実装してみます。
僕
適宜、置き換えて参考にしてみてください!
- 横は、画面幅
- 縦は、横幅を75とした時、9となる比率で調整
つまり、縦:横=9:75 となります。
実装内容
横幅を基準として、縦を調整する実装をしていきます。
1 2 3 4 5 6 7 |
Display display = this.getWindowManager().getDefaultDisplay(); Point point = new Point(); display.getSize(point); int px_height = (point.x * 3) / 25; mTextView.setHeight(px_height); |
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(縦幅)を求めたい際は、
適宜、移項して計算してみてくださいね!