Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

layout_weightを設定した時は、layout_widthは0dpに設定するべき、という事を再確認した話

 どうも!LSSです!!

 

 AndroidStudio+KotlinでAndroidスマホアプリ開発の勉強中です。

 

 今、タイマーアプリを作成しながら、コードを書くというよりはxmlレイアウトを試行錯誤している状態です^^;;;

 

 

たどり着いた結論(こんな風にしたかったのです)

f:id:little_strange:20200105121224p:plain

 アプリ起動時の画面。

 ここから、使うタイマーを選ぶボタンを2列で並べているのですが、やりたかった事は
「左列と右列のボタンの幅を同じにしたい!」
だったのです。

 

 また、上記のように幅が同じになっているボタンのAttributesは、

f:id:little_strange:20200105121803p:plain

↑このようになっています。
 layout_weightを左右のボタンどちらも1に設定すると、どちらのボタンも均等の幅になるハズで、またそうさせる際には、幅を設定するlayout_widthは0dpに設定する、という事ですね。

 

 

 

LinearLayoutの入れ子とlayout_weightの組み合わせは、AndroidStudioに怒られます!

 LinearLayout大好きLSSです。←某ブロガーさんの真似になっちゃった

 LinearLayoutにはverticalhorizontalの2種類あり、verticalが中身縦並び、horizontalが中身横並びになります。

 だもんで、

f:id:little_strange:20200105122939p:plain

はてなブログの「絵を描く」機能を使ってみましたw)

 画面全体をLinearLayout(vertical)にして、その中にLinearLayout(horizontal)を縦並びに3つ置いて、それぞれのLinearLayout(horizontal)にボタンを2つづつ置いて、全てのボタンのlayout_weightを1にしとけばいい、という算段でした。

 

で、怒られるんですよねぇ、AndroidStudioちゃんに^^;;;

 エラーにはならないけど、警告マークが出て、そこに出てくる文を読むと「処理が重くなりまっせ」との事。


 サイズを指定せずに、layout_weightで「均等になるようにしてね」っていう曖昧な指示なもんで、「どのサイズにすれば均等になるんかな?」ってOSが考えるのに手間を食う、って事ですね。

 

かといって、サイズを厳密に指定すると、Androidスマホアプリ開発の難しいところなんですが「ユーザーの端末の画面サイズが様々」であるが故に、レイアウトが大幅に狂う、という難点があります。

 

 

格子状のレイアウトならTableLayoutでしょ!

 以前にも使ったTableLayout、今回のように格子状(表形式みたいな)のレイアウトを組むなら最善の選択かと思います。

 以前にもやったはずなのにねwww

 

 つまり、

f:id:little_strange:20200105144852p:plain

↑こういう感じ。

 これに変える事で、AndroidStudioちゃんの警告も消えました^^

 

 なお、TableLayoutの中にTableRowを配置する構造って、以前に書いた
HTMLでいうところの<table>タグと<tr>タグの関係に似ていますね。

 

 ああ!!HTMLの<tr>タグってTableRowって意味か!!!

…と今更気づくwww

 

 

この時点での画面の雰囲気がこんな感じ

f:id:little_strange:20200105150027p:plain

 

…明らかに右列のボタンのほうが幅広いんですよね^^;

 この時の各ボタンのAttributesは

f:id:little_strange:20200105150227p:plain

↑こんな風になっていました。

 

 layout_weightを全てのボタンで1にしているのに、なんで均等にならない??
と考えてたら、知識としては知っていたはずの
「layout_weightでバランス調整する時はサイズは0dpにすべき」
っていうのを思い出して、

f:id:little_strange:20200105121803p:plain

layout_widthを0dpに設定したところ、

 

f:id:little_strange:20200105121224p:plain

 

 無事、やりたかった「ボタンの幅の均等表示」が出来ました!
※均等表示にしたら「インターバル」が途中改行されちゃったので文字サイズ1段階下げたという事もありましたがw

 

 

しっくりは来ないけど、こういうモノと思うしか…?

「layout_widthを指定しない」だったら納得もいくけど、「0dpに設定」っていうのがどうもしっくりこない^^;

 ちなみに、同じボタンで「layout_heightを0dpに設定」すると、そっちは普通に縦が0dpサイズになるのも不自然な気がしますが、今んとこ「こういうモノ」と思っておきますw

 

 

てなところで、今回はこのへんで!

 次回もまた、よろしくお願いします^^