Android: TableLayoutで指定列を可変長にする方法

TableLayoutでハマったのでメモとして残しておきます。
本でもあんまりTableLayoutって見かけない気がする。
HTMLのテーブルほど利便性があるわけではないけど、
項目の頭を合わせることができるのが便利な点。

でもなんだか使いにくい。まぁちゃんとリファレンス読めよという話なのかもしれないけれど。

やりたかったことは、

  • 3列の2列目のTextViewを可変長にする
  • 3列の2列目のTextViewに入る内容が長くてもレイアウト崩れないようにする

です。

2列目を可変長にすればいいだからと思って、TableLayoutのリファレンスを大して読まずに2列目のTextViewにandroid:Layout_weight=”1″を設定すればいいんだろうと思ってたのがで大間違い。既存のリリースでは解決方法がわからなかったので、Layout_widthに固定長の値を入れてなんとかしていたのですが、Desireが2.2になったら明らかにレイアウトが崩れていたのでなんとかせねばと。

twitterでTableLayoutわかんねー!ってぼやいていたら、ryosmsさんにTableLayoutのandroid:strechColumnsの存在を教えてもらいました。さすが瀬戸デ部メンバー!ありがたい!!指定した列のカラムが自動で最大長になってくれるという属性らしいっす。これがLayout_weightの代わりになってくれそう。で、これだけ指定したら、2列目の内容が長過ぎる場合に3列目が画面外に追いやられてしまいました…。

このあと、指定したカラムの内容を縮小して表示するという属性があることを知り、それを該当カラムに適用するように書いたらうまくいきました。android:shrinkColumnsです。適用させたいカラムをカンマ区切りの数字で指定するらしいです。*を指定すると全部の行に適用になります。

あと、カラムの間隔をmargin使って制御しようとすると、strechColumnsと喧嘩するので、paddingを使ってます。

実際に使ってるソースの一部を切り出してます。
注目するべきはTableLayoutのandroid:shrinkColumnsとandroid:strechColumnsのみなので、あとはオマケみたいなもんです。

<TableLayout android:layout_height="wrap_content"
	android:layout_width="fill_parent"
	android:shrinkColumns="1"
	android:stretchColumns="1">
	<TableRow android:layout_height="wrap_content"
		android:layout_width="fill_parent" android:id="@+id/rowSearchByMap">
		<TextView 
			android:layout_width="wrap_content" 
			android:layout_height="wrap_content" 
			android:text="@string/lbl_map"
			android:layout_gravity="left|center_vertical"
			android:paddingRight="5dp" />
		<TextView 
			android:layout_width="wrap_content" 
			android:layout_height="wrap_content" 
			android:id="@+id/txtAdress" 
			android:layout_gravity="left|center_vertical" 
			android:text="@string/txt_no_setting"
			 />
		<ToggleButton 
			android:text="@+id/ToggleButton01"
			android:layout_width="wrap_content" 
			android:layout_height="wrap_content"
			android:layout_gravity="right|center_vertical"
			android:id="@+id/toggleMap"/>
	</TableRow>
	<TableRow android:layout_height="wrap_content" android:id="@+id/rowSearchByDate"
		android:layout_width="fill_parent">
		<TextView android:layout_width="wrap_content"
			android:layout_height="wrap_content" android:text="@string/lbl_date"
			android:layout_gravity="left|center_vertical" android:paddingRight="5dp" />
		<TextView 
			android:layout_width="wrap_content" 
			android:layout_height="wrap_content" 
			android:id="@+id/txtSearchByDate" 
			android:layout_gravity="left|center_vertical" 
			android:text="@string/txt_no_setting"
			 />
		<ToggleButton android:text="@+id/ToggleButton02"
			android:layout_width="wrap_content" android:layout_height="wrap_content"
			android:layout_gravity="right|center_vertical" android:id="@+id/toggleDate" />
	</TableRow>
</TableLayout>

これで、2列目が可変長になり、2列目の内容が長かったとしても自動で改行してくれるようになりました。めでたしめでたし。


カテゴリー Android | タグ | パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です