TableLayout特点:

1)TableLayout和我们平时在网页上见到的Table有所不同,TableLayout没有边框的

2)它是由多个TableRow对象组成,每个TableRow可以有0个或多个单元格,每个单元格就是一个View。这些TableRow,单元格不能
设置layout_width,宽度默认是fill_parent的,只有高度layout_height可以自定义,默认是
wrap_content。

3)单元格可以为empty,并且通过android:layout_column可以设置index值实现跳开某些单元格。在TableRow之间

4)添加View,设置layout_height以及背景色,就可以实现一条间隔线。android:layout_span可以设置合并几个单元格:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  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. <TableRow>
  17. <TextView
  18. android:text="column11"
  19. android:visibility="invisible"/> //cell不见了
  20. <TextView
  21. android:text="左边的invisible"
  22. android:gravity="right"
  23. android:padding="3dip" />
  24. <Button
  25. android:id="@+id/go"
  26. android:text="go"
  27. android:padding="3dip" />
  28. <Button
  29. android:text="cancel"
  30. android:padding="3dip" />
  31. </TableRow>
  32. <View                               //间隔线
  33. android:layout_height="2dip"
  34. android:background="#F00" />
  35. <TableRow>
  36. <TextView
  37. android:text="右边的cell empty" />
  38. <TextView
  39. android:layout_column="2"
  40. android:text="跳开empty cell"
  41. android:padding="3dip" />
  42. </TableRow>
  43. <TableRow>
  44. <TextView
  45. android:text="合并3个单元格"
  46. android:layout_span="3"
  47. android:gravity="center_horizontal"
  48. android:background="#FFC0C0C0"
  49. android:textColor="#f00"
  50. android:padding="3dip" />
  51. </TableRow>
  52. </TableLayout>

没有设置收缩/伸展效果

注意,原来没有添加 android:padding="3dip" 的,发现那些column会凑在一起的,没有空白间隔!明显看到,那个cancel按钮被挤到几乎看不见了!这时候需要使用 
     1)android:shrinkColumns="可收缩的column", 
     2)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. <?xml version="1.0" encoding="utf-8"?>
  2. <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:shrinkColumns="0" > // 设置第一个column可收缩
  6. <TableRow>
  7. <TextView
  8. android:text="column1"
  9. android:padding="3dip"  />
  10. <TextView
  11. android:text="column2"
  12. android:padding="3dip"  />
  13. <TextView
  14. android:text="column3"
  15. android:padding="3dip"  />
  16. </TableRow>
  17. <TableRow>
  18. <TextView
  19. android:text="column11"
  20. android:visibility="invisible"/>
  21. <TextView
  22. android:text="左边的invisible"
  23. android:gravity="right"
  24. android:padding="3dip" />
  25. <Button
  26. android:id="@+id/go2"
  27. android:text="go2"
  28. android:padding="3dip" />
  29. <Button
  30. android:text="cancel"
  31. android:padding="3dip" />
  32. </TableRow>
  33. <View
  34. android:layout_height="2dip"
  35. android:background="#F00" />
  36. <TableRow>
  37. <TextView
  38. android:text="右边的cell empty" />
  39. <TextView
  40. android:layout_column="2"
  41. android:text="跳开empty cell"
  42. android:padding="3dip" />
  43. <TextView
  44. android:text="123456789"
  45. android:padding="3dip" />
  46. </TableRow>
  47. </TableLayout>

可收缩column效果

现在可以看到第一个column为了让第4个column完整显示,而收缩得内容分为几行显示!

而可伸展column的效果就是在其他column可以完整显示时,该column就会伸展,占最多空间: 
<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:stretchColumns="1"> // 设置第二个column可伸展

<TableRow>

<TextView

android:text="column1"

android:padding="3dip" />

<TextView

android:text="column2"

android:gravity="right"

android:padding="3dip" />

<TextView

android:text="column3"

android:padding="3dip"  />

</TableRow>

<TableRow>

<TextView

android:text="column1"

android:padding="3dip" />

<TextView

android:text="column2"

android:gravity="right"

android:padding="3dip" />

<TextView

android:text="column3"

android:padding="3dip"  />

</TableRow>

</TableLayout> 
可伸展column效果

而动态隐藏column,可以调用TableLayout.setColumnCollapsed (int
columnIndex, boolean isCollapsed)来指定相应的column。另外TableLayout类的boolean
isColumnCollapsed (int columnIndex)能够判断指定的column是否隐藏。

TableLayout可以用来做网页上的Form显示效果,看看官方的sample: 
<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:stretchColumns="1">

<TableRow>

<TextView

android:text="@string/table_layout_10_user"

android:textStyle="bold"

android:gravity="right"

android:padding="3dip" />

<EditText android:id="@+id/username"

android:text="@string/table_layout_10_username_text"

android:padding="3dip"

android:scrollHorizontally="true" />

</TableRow>

<TableRow>

<TextView

android:text="@string/table_layout_10_password"

android:textStyle="bold"

android:gravity="right"

android:padding="3dip" />

<EditText android:id="@+id/password"

android:text="@string/table_layout_10_password_text"

android:password="true"

android:padding="3dip"

android:scrollHorizontally="true" />

</TableRow>

<TableRow

android:gravity="right">

<Button android:id="@+id/cancel"

android:text="@string/table_layout_10_cancel" />

<Button android:id="@+id/login"

android:text="@string/table_layout_10_login" />

</TableRow>

</TableLayout> 
Form效果

Android TableLayout中的使用说明的更多相关文章

  1. Android Studio中的Module,Facet

    详细内容请参看 http://www.jetbrains.com/idea/webhelp/facet.html 以及 http://www.jetbrains.com/idea/webhelp/an ...

  2. Android Studio中配置及使用OpenCV示例

    Android Studio配置及使用OpenCV 前言:最近在做项目移植,项目较大,在Eclipse中配置的Jni及OpenCV环境没任何问题,但是迁移到Studio中就问题一大堆,网上也找了一些资 ...

  3. 在 Android开发中,性能优化策略十分重要

    在 Android开发中,性能优化策略十分重要本文主要讲解性能优化中的布局优化,希望你们会喜欢.目录 示意图 1. 影响的性能 布局性能的好坏 主要影响 :Android应用中的页面显示速度 2. 如 ...

  4. Android studio中的6大布局

    1.相对布局代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns: ...

  5. 从Android设备中提取内核和逆向分析

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/57074695 一.手机设备环境 Model number: Nexus 5 OS ...

  6. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  7. Stack Overflow 排错翻译 - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder

    Stack Overflow 排错翻译  - Closing AlertDialog.Builder in Android -Android环境中关闭AlertDialog.Builder 转自:ht ...

  8. Google官方关于Android架构中MVP模式的示例续-DataBinding

    基于前面的TODO示例,使用Data Binding库来显示数据并绑定UI元素的响应动作. 这个示例并未严格遵循 Model-View-ViewModel 或 Model-View-Presenter ...

  9. android studio 中移除module和恢复module

    一.移除Android Studio中module 在Android Studio中想要删除某个module时,在Android Studio中选中module,右键发现没有delete,如图: An ...

随机推荐

  1. php传值,传地址,传引用的区别

    传值,   是把实参的值赋值给行参   那么对行参的修改,不会影响实参的值 传地址   是传值的一种特殊方式,只是他传递的是地址,不是普通的如int   那么传地址以后,实参和行参都指向同一个对象 传 ...

  2. 转载自(http://snailz.diandian.com/post/2012-10-24/40041265730)

    PHP 5.4.8 添加系统服务命令 之前没注意,PHP 5.4.8 的安装包有自带的系统服务注册文件的 打开编译安装包,换成你自己的路径 cd /mydata/soft/php-5.4.8/ cp ...

  3. SQLServer 重启服务后,自增1的标识列一次增长了1000(转自博问)

    sql2012:我重启了下sql服务,然后自增列Id居然一下子跳了100,怎么回事啊?(之前的数据Id为1,我重启服务后,第二条数据Id就变成1001了),我自增是1,求大神帮忙啊 SQLServer ...

  4. cxf-webservice完整示例

    最近一段时间研究webservice,一般来说,开发java的Webservice经常使用axis2和cxf这两个比较流行的框架 先使用cxf,开发一个完整示例,方便对webservice有一个整体的 ...

  5. Q-learning简明实例

    本文是对 http://mnemstudio.org/path-finding-q-learning-tutorial.htm 的翻译,共分两部分,第一部分为中文翻译,第二部分为英文原文.翻译时为方便 ...

  6. python 运行脚本报错 from keyword import iskeyword as _iskeyword ImportError: cannot import name iskeyword,说明python环境坏了,得重装,尚不知具体原因,

    C:\Python27\Scripts>python task_test.pyTraceback (most recent call last):  File "task_test.p ...

  7. Linux服务器---配置apache支持用户认证

    Apache支持用户认证 为了服务器的安全,通常用户在请求访问某个文件夹的时候,Apache可以要求用户输入有效的用户名和登录密码 1.创建一个测试目录 [root@localhost cgi-bin ...

  8. Linux基础命令---fsck

    fsck 检查或者修复指定的文件系统,可以是设备名.挂载点,还可以是一个ext2的label,或者是一个UUID.此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.ope ...

  9. 多线程---ReentrantLock

    package com.test; import java.util.Collection; import java.util.concurrent.locks.Lock; import java.u ...

  10. SVN版本服务器搭建

    windows:        https://blog.csdn.net/lu1024188315/article/details/74082227 SVN 的下载地址如下 http://torto ...