2011年9月1日木曜日

実験:TableLayoutで均等配置はできるのか


実験: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>

1 件のコメント:

  1. なるほど。weightは対象がfill_parentだと違って解釈されるのですね…。1週間ほどハマってましたので助かりました。

    返信削除