おちゃのテクログ

DIY好き、スポーツ好きのプログラマです

【android studio】layout weightがうまくいかない

以前作成した電卓アプリ「にゃん卓」で0ボタンを他のボタンの2倍の幅にしたかったのですが、うまくできませんでした。

無事解決したのでメモしておきます
you-otya.hatenablog.com

  

勘違い

layout weightで表示サイズを比率で指定できると勘違いしていました。

なので、0ボタンにはlayout weight = 2, ほかのボタンは1を設定しましたが結果がご覧の通り。

 

f:id:you_otya:20190608105823p:plain

 

正しくは余白の比率

layout weightは余白を埋める比率を指定できるというのが正しいようです。

正直がっかりです。めちゃ面倒やん!

 

layout weightを0にすると、こんな感じで余白があります。

「0」ボタン、「.」ボタン、「=」ボタン、それぞれのボタンに割り振る余白の比率を変更できるわけです。

f:id:you_otya:20190608111635p:plain

 

 

なので、0ボタンにだけweightを設定すると余白がすべて0ボタンのものに・・・

f:id:you_otya:20190608111945p:plain



画面サイズとボタンサイズによっては、余白はマイナスにもなります

試しに、すべてのボタンを0にするとこんな感じになります。

「-」ボタンが潰れているのは余白がマイナスになっているからです。

f:id:you_otya:20190608112743p:plain

 

 

全部1を指定すると、余白を均等に割り振るので、同じ幅になります。

f:id:you_otya:20190608113146p:plain

 

どうすればいいか

画面サイズ、ボタンサイズが分かっていれば、ボタンに割り当てるべき余白が分かるはずです。

 

プログラム上で画面サイズやボタンサイズを取得できそうですが面倒なので、ボタンサイズ=画面サイズに設定することで解決します。

 

ボタンのwidthをmatch_parent設定することで画面サイズ=ボタンサイズとなります。

すると、layout wight未設定の状態では「.」ボタンと「=」ボタンがはみ出して、余白は-2*parentとなります。

 

f:id:you_otya:20190608115151p:plain

 

あとはこの余白を各ボタンに割り当てれば希望の配置となります。

 

 

それぞれのボタンに割り当てたい余白は以下の通りですので、2:3:3の割合で余白を設定すれば良さそうです

余白 = -2 * parent

「0」ボタンに割り当てたい余白 = -parent * 2/4 = 余白 * 2/8

「.」ボタンに割り当てたい余白 = -parent * 3/4 = 余白 * 3/8

「=」ボタンに割り当てたい余白 = -parent * 3/4 = 余白 * 3/8

 

 

できた!

f:id:you_otya:20190608115734p:plain

予想通り、ボタンの幅をmatch_parentにしてlayout weightを2:3:3で割り当てることで0ボタンを他のボタンの2倍の幅にすることができました