Android UI - TableLayout

转自:http://android.blog.51cto.com/268543/314262

TableLayout和我们平时在网页上见到的Table有所不同,TableLayout没有边框的,它是由多个TableRow对象组成, 每个TableRow可以有0个或多个单元格,每个单元格就是一个View。这些TableRow,单元格不能设置layout_width,宽度默认是fill_parent的,只有高度layout_height可以自定义,默认是wrap_content。 单元格可以为empty,并且通过android:layout_column可以设置index值实现跳开某些单 元格。在TableRow之间,添加View,设置layout_height以及背景色,就可以实现一条间隔线。 android:layout_span可以设置合并几个单元格 :


  1. < TableLayoutxmlns:android = "http://schemas.android.com/apk/res/android"
  2. android:layout_width = "fill_parent"
  3. android:layout_height = "fill_parent" >
  4. < TableRow >
  5. < TextView
  6. android:text = "column1"
  7. android:padding = "3dip"/>
  8. < TextView
  9. android:text = "column2"
  10. android:padding = "3dip"/>
  11. < TextView
  12. android:text = "column3"
  13. android:padding = "3dip"/>
  14. < TableRow >
  15. < TextView
  16. android:text = "column11"
  17. android:visibility ="invisible"/>//cell不见了
  18. < TextView
  19. android:text = "左边的invisible"
  20. android:gravity = "right"
  21. android:padding = "3dip"/>
  22. < Button
  23. android:id = "@+id/go"
  24. android:text = "go"
  25. android:padding = "3dip"/>
  26. < Button
  27. android:text = "cancel"
  28. android:padding = "3dip"/>
  29. < View//间隔线
  30. android:layout_height ="2dip"
  31. android:background ="#F00"/>
  32. < TableRow >
  33. < TextView
  34. android:text = "右边的cell empty"/>
  35. < TextView
  36. android:layout_column ="2"
  37. android:text = "跳开empty cell"
  38. android:padding = "3dip"/>
  39. < TableRow >
  40. < TextView
  41. android:text = "合并3个单元格"
  42. android:layout_span ="3"
  43. android:gravity = "center_horizontal"
  44. android:background = "#FFC0C0C0"
  45. android:textColor = "#f00"
  46. android:padding = "3dip"/>
没有设置收缩/伸展效果 Android UI - TableLayout
文章图片

注意,原来没有添加 android:padding="3dip" 的,发现那些column会凑在一起的,没有空白间隔!明显看到,那个cancel按钮被挤到几乎看不见了!这时候需要使用 android:shrinkColumns="可收缩的column",android:stretchColumns="可伸展的column"。 android:shrinkColumns 和android:stretchColumns 的值都是以0开始的index,但必须是string值,即用"1,2,5"来表示。可以用"*"来表示all columns。而且同一column可以同时设置为shrinkable和stretchable。如果使用TableLayout类的 setColumnShrinkable/setColumnStretchable (int columnIndex, boolean isShrinkable) 就麻烦些了,需要一个一个column来设置。也可以使用TableLayout的 setShrinkAllColumns/setStretchAllColumns 来设置all columns。 判断这些column是否shrinkable或stretchable,可以调用 isColumnShrinkable/isColumnStretchable(int columnIndex),isShrinkAllColumns()/isStretchAllColumns() 。

  1. < TableLayoutxmlns:android = "http://schemas.android.com/apk/res/android"
  2. android:layout_width = "fill_parent"
  3. android:layout_height = "fill_parent"
  4. android:shrinkColumns ="0">// 设置第一个column可收缩
  5. < TableRow >
  6. < TextView
  7. android:text = "column1"
  8. android:padding = "3dip"/>
  9. < TextView
  10. android:text = "column2"
  11. android:padding = "3dip"/>
  12. < TextView
  13. android:text = "column3"
  14. android:padding = "3dip"/>
  15. < TableRow >
  16. < TextView
  17. android:text = "column11"
  18. android:visibility = "invisible" />
  19. < TextView
  20. android:text = "左边的invisible"
  21. android:gravity = "right"
  22. android:padding = "3dip"/>
  23. < Button
  24. android:id = "@+id/go2"
  25. android:text = "go2"
  26. android:padding = "3dip"/>
  27. < Button
  28. android:text = "cancel"
  29. android:padding = "3dip"/>
  30. < View
  31. android:layout_height = "2dip"
  32. android:background = "#F00"/>
  33. < TableRow >
  34. < TextView
  35. android:text = "右边的cell empty"/>
  36. < TextView
  37. android:layout_column = "2"
  38. android:text = "跳开empty cell"
  39. android:padding = "3dip"/>
  40. < TextView
  41. android:text = "123456789"
  42. android:padding = "3dip"/>
可收缩column效果 Android UI - TableLayout
文章图片

现在可以看到第一个column为了让第4个column完整显示,而收缩得内容分为几行显示! 而 可伸展column 的效果就是在其他column可以完整显示时,该column就会伸展,占最多空间:

  1. < TableLayoutxmlns:android = "http://schemas.android.com/apk/res/android"
  2. android:layout_width = "fill_parent"
  3. android:layout_height = "fill_parent"
  4. android:stretchColumns ="1" >// 设置第二个column可伸展
  5. < TableRow >
  6. < TextView
  7. android:text = "column1"
  8. android:padding = "3dip"/>
  9. < TextView
  10. android:text = "column2"
  11. android:gravity = "right"
  12. android:padding = "3dip"/>
  13. < TextView
  14. android:text = "column3"
  15. android:padding = "3dip"/>
  16. < TableRow >
  17. < TextView
  18. android:text = "column1"
  19. android:padding = "3dip"/>
  20. < TextView
  21. android:text = "column2"
  22. android:gravity = "right"
  23. android:padding = "3dip"/>
  24. < TextView
  25. android:text = "column3"
  26. android:padding = "3dip"/>
可伸展column效果 Android UI - TableLayout
文章图片

而动态隐藏column,可以调用TableLayout.setColumnCollapsed (int columnIndex, boolean isCollapsed)来指定相应的column。另外TableLayout类的boolean isColumnCollapsed (int columnIndex)能够判断指定的column是否隐藏。 TableLayout可以用来做网页上的Form显示效果,看看官方的sample:

  1. < TableLayoutxmlns:android = "http://schemas.android.com/apk/res/android"
  2. android:layout_width = "fill_parent"
  3. android:layout_height = "fill_parent"
  4. android:stretchColumns = "1" >
  5. < TableRow >
  6. < TextView
  7. android:text = "@string/table_layout_10_user"
  8. android:textStyle = "bold"
  9. android:gravity = "right"
  10. android:padding = "3dip"/>
  11. < EditTextandroid:id = "@+id/username"
  12. android:text = "@string/table_layout_10_username_text"
  13. android:padding = "3dip"
  14. android:scrollHorizontally = "true"/>
  15. < TableRow >
  16. < TextView
  17. android:text = "@string/table_layout_10_password"
  18. android:textStyle = "bold"
  19. android:gravity = "right"
  20. android:padding = "3dip"/>
  21. < EditTextandroid:id = "@+id/password"
  22. android:text = "@string/table_layout_10_password_text"
  23. android:password = "true"
  24. android:padding = "3dip"
  25. android:scrollHorizontally = "true"/>
  26. < TableRow
  27. android:gravity = "right" >
  28. < Buttonandroid:id = "@+id/cancel"
  29. android:text = "@string/table_layout_10_cancel"/>
  30. < Buttonandroid:id = "@+id/login"
  31. android:text = "@string/table_layout_10_login"/>
Form效果 【Android UI - TableLayout】Android UI - TableLayout
文章图片

    推荐阅读