実験:TableLayoutで均等配置はできるのか
結論:できる。横方向だけですけど。
考察:
stretchColumnsは、指定された列を横方向に最大限伸ばす、という機能があります。これを全ての列に適用すれば、均等配置ができます。
各列に格納される文字数が少なければ、各列は均等に配置されます。
しかし、長い文字列が格納されると、均等ではなくなってしまいます。この長い文字列対策のため、android:width="0dp"を書くことにより均等に配置できます。
問題点:
均等に配置するだけであって、任意の割合で表示する機能はstretchColumnsにはありません。任意の割合で表示する場合にはandroid:layout_weightを導入する方が良いと思います。
均等に配置するということを目的に、stretchColumnsが設計されたのではありません。
以下は、実験用の動かないXMLです。SeekBarとLinearLayoutとが1対1の割合で表示されることを期待しましたが、そうなりません。
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="0,1">
>
<TableRow>
<SeekBar
android:id="@+id/SeekBar"
android:width="0dp"
>
</SeekBar>
<LinearLayout
android:orientation="horizontal"
>
<TextView
android:id="@+id/TextView"
android:text="Valueeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
android:width="0dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</TextView>
<Button
android:id="@+id/Button"
android:text="Buttonnnnnnnnnnnnnnnnnnnn"
android:width="0dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
</Button>
</LinearLayout>>
</TableRow>
</TableLayout>
なるほど。weightは対象がfill_parentだと違って解釈されるのですね…。1週間ほどハマってましたので助かりました。
返信削除