【android studio】layout weightがうまくいかない
以前作成した電卓アプリ「にゃん卓」で0ボタンを他のボタンの2倍の幅にしたかったのですが、うまくできませんでした。
無事解決したのでメモしておきます
you-otya.hatenablog.com
勘違い
layout weightで表示サイズを比率で指定できると勘違いしていました。
なので、0ボタンにはlayout weight = 2, ほかのボタンは1を設定しましたが結果がご覧の通り。
正しくは余白の比率
layout weightは余白を埋める比率を指定できるというのが正しいようです。
正直がっかりです。めちゃ面倒やん!
layout weightを0にすると、こんな感じで余白があります。
「0」ボタン、「.」ボタン、「=」ボタン、それぞれのボタンに割り振る余白の比率を変更できるわけです。
なので、0ボタンにだけweightを設定すると余白がすべて0ボタンのものに・・・
画面サイズとボタンサイズによっては、余白はマイナスにもなります。
試しに、すべてのボタンを0にするとこんな感じになります。
「-」ボタンが潰れているのは余白がマイナスになっているからです。
全部1を指定すると、余白を均等に割り振るので、同じ幅になります。
どうすればいいか
画面サイズ、ボタンサイズが分かっていれば、ボタンに割り当てるべき余白が分かるはずです。
プログラム上で画面サイズやボタンサイズを取得できそうですが面倒なので、ボタンサイズ=画面サイズに設定することで解決します。
ボタンのwidthをmatch_parent設定することで画面サイズ=ボタンサイズとなります。
すると、layout wight未設定の状態では「.」ボタンと「=」ボタンがはみ出して、余白は-2*parentとなります。
あとはこの余白を各ボタンに割り当てれば希望の配置となります。
それぞれのボタンに割り当てたい余白は以下の通りですので、2:3:3の割合で余白を設定すれば良さそうです
余白 = -2 * parent
「0」ボタンに割り当てたい余白 = -parent * 2/4 = 余白 * 2/8
「.」ボタンに割り当てたい余白 = -parent * 3/4 = 余白 * 3/8
「=」ボタンに割り当てたい余白 = -parent * 3/4 = 余白 * 3/8
できた!
予想通り、ボタンの幅をmatch_parentにしてlayout weightを2:3:3で割り当てることで0ボタンを他のボタンの2倍の幅にすることができました。