一:TableLayout是表格布局先上例子:

定义一个xml布局文件tablelayout.xml:

内容如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  android:orientation="vertical"  android:layout_width="fill_parent"  android:layout_height="fill_parent"  android:gravity="center_horizontal">  <TableLayout     android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:stretchColumns="0,1,2"        android:shrinkColumns="1,2"   >   <TableRow>               <TextView                       android:layout_column="1"                       android:text="姓名"                       android:gravity="center"           android:background="#BBFFFF"/>               <TextView                       android:text="基本信息"                       android:gravity="center"           android:background="#CD00CD"/>           <TextView                       android:text="大大的人人儿呢"                       android:gravity="center"           android:background="#A020F0"/>        </TableRow>  </TableLayout></LinearLayout>

package com.test;import android.app.Activity;import android.os.Bundle;public class TableLayoutAndRowDemo extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.tablelayout);}}

效果:

Android TableLayout表格布局

内容讲解:

TableLayout,表格布局采用行列形式管理UI组件,TableLayout不需要明确地声明有多少行和列,而是通过添加TableRow、其它组件来控制表格的行数、列数。
v每次向TableLayout添加一个TableRow,就是在向表格添加一行,TableRow也是容器,可以向TableRow中添加组件,每添加一个组件,即是添加一列。
v如果直接向TableLayout添加组件,则认为这个组件占用一行。
v表格布局中列的宽度即是每一列中最宽的组件的宽度。

android:collapseColumns="1---隐藏该TableLayout里的TableRow的列1,即第2列(从0开始计算),若有多列要隐藏,用“,”隔开。setColumnCollapsed(int,boolean)

android:stretchColumns="0,1,2"----设置列0、1、2为可伸展列。setColumnCollapsed(int,boolean)

android:shrinkColumns="1,2"-----设置列1、2为可收缩列。当LayoutRow里面的控件还没有布满布局时,shrinkColumns不起作用 setColumnCollapsed(int,boolean)

android:background="@drawable/picture_name"----本例中没有涉及此属性,它是要设置当前view 的背景图片,图片文件应该放在res文件夹下。

android:layout_column="1":表示控件放在标号为1的列上,标号是从0开始的
android:layout_span表示一个控件占几列空间
可以用”*”来表示所有列,同一列可以同时设置为shrinkable和stretchable

函数:

public TableLayout (Context context);//为给定的上下文创建表格布局。//参数   context  应用程序上下文

public TableLayout (Context context, AttributeSet attrs)//使用指定的属性集合为给定的上下文创建表格布局。//参数    context  应用程序上下文     attrs        属性集合

public void addView (View child)public void addView (View child, int index)public void addView (View child, int index, ViewGroup.LayoutParams params)//添加子视图。如果子视图没有设置布局参数,则使用视图组(ViewGroup)的布局参数为//该视图布局。index  子视图加入的位置索引public void addView (View child, ViewGroup.LayoutParams params)//使用指定的布局参数添加子视图。//参数    child         添加的子视图   params  设置到子视图上的布局参数public TableLayout.LayoutParams generateLayoutParams (AttributeSet attrs)//返回一组基于提供的属性集合的布局参数集合。//参数//attrs        用于生成布局参数的属性集//返回值        ViewGroup.LayoutParams或其子类的实例  

public boolean isColumnCollapsed (int columnIndex)//返回指定列的折叠状态。//参数   columnIndex  列索引//返回值     折叠时为true;否则为false public boolean isColumnShrinkable (int columnIndex)//返回指定的列是否可收缩。//参数      columnIndex  列索引//返回值    如果列可以收缩,返回true;否则返回false

public boolean isColumnStretchable (int columnIndex)//返回指定的列是否可拉伸。//参数       columnIndex  列索引//返回值     如果列可以拉伸,返回true;否则返回false

public boolean isShrinkAllColumns ()//指示是否所有的列都是可收缩的。//返回值// 如果所有列都可收缩,返回true;否则返回false

public boolean isStretchAllColumns ()//指示是否所有的列都是可拉伸的。//返回值    如果所有列都可拉伸,返回true;否则返回false

public void requestLayout ()//当某些变更导致视图的布局失效时调用该方法。该方法按照视图树的顺序调用。 public void setColumnCollapsed (int columnIndex, boolean isCollapsed)  //折叠或恢复给定列。折叠时,列从屏幕上消失,其空间由其它列占用。 当列属于 TableRow 时才可以进行折叠/恢复操作。  //调用该方法会请求布局操作。相关XML属性 android:collapseColumns参数 columnIndex 列索引isCollapsed 折叠时为true;否则为false

public void setColumnShrinkable (int columnIndex, boolean isShrinkable)//设置指定列是否可收缩。当行太宽时,表格可以收缩该列以提供更多空间。//调用该方法会请求布局操作。//相关XML属性    android:shrinkColumns//参数    columnIndex  列索引//         isShrinkable    如果列可以收缩,设为真;否则设为假。默认是假。

public void setColumnStretchable (int columnIndex, boolean isStretchable)//设置指定列是否可拉伸。可拉伸时,列会尽可能多的占用行中的可用空间。//调用该方法会请求布局操作。//相关XML属性    android:stretchColumns//参数    columnIndex  列索引//         isStretchable 如果列可以拉伸,设为真;否则设为假.默认是假

public void setOnHierarchyChangeListener (ViewGroup.OnHierarchyChangeListener listener)注册当从视图中添加或移除子视图时发生的回调函数。参数  listener  层次结构变更时执行的回调函数public void setShrinkAllColumns (boolean shrinkAllColumns)  标记所有列为可收缩的便利的方法。  相关XML属性   android:shrinkColumns  参数   shrinkAllColumns    如果标记所有列为可收缩时为true public void setStretchAllColumns (boolean stretchAllColumns)  标记所有列为可拉伸的便利的方法。相关XML属性   android:stretchColumns参数    stretchAllColumns           如果标记所有列为可拉伸时为true

三:TableLayout实现边框

为了醒目,需要给TableLayout设定边框来区分不同的表格中的信息:

主要是通过设定TableLayout、TableRow 、View颜色反衬出边框的颜色。

例如TableLayout的android:layout_margin="2dip"设置为这个数字 ,在指定一个背景色android:background="#00ff00",它里面的颜色也是这样子的设置,就可以呈现出带边框的效果了。

(2)关于分割线:
我们可以通过在两个TableRow之间添加一个<View>,并设置它的layout_height="1dip"和background来解决。但这样就多产生了一个View,有点浪费。
其实还可以设置TableRow的bottomMargin=1来产生一条分割线。
3.滚动:

关于TableLayout和HorizontalScrollView一起使用时的宽度问题
我有一个TableLayout,它的内容是动态生成的。我遇到了下面的问题:
当动态生成的一行的内容太长时,靠右边的内容会被遮住了。于是我想要这个TableLayout在横向上可以滚动。
解决的办法是,用HorizontalScrollView包装TableLayout,这样,当内容很长时,就会出现横向滚动条。
像这样:

<?xml version="1.0" encoding="utf-8"?><HorizontalScrollView   android:layout_width="fill_parent"   android:layout_height="fill_parent">    <TableLayout    android:id="@+id/tl_forcast_result"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:padding="10dp">      </TableLayout>   </HorizontalScrollView>  

但此时又出现了另一个问题,加上HorizontalScrollView后,虽然我已经设了TableLayout的宽度是fill_parent。但当内容较少时,TableLayout还是根据内容自适应宽度,不能满屏。
此时,需要设置一个属性就能解决问题了。设置HorizontalScrollView的android:fillViewport="true"。也就是设置是否将HorizontalScrollView的内容宽度拉伸以适应视口(viewport)


更多相关文章

  1. Android学习知识点之相对布局
  2. 布局 遗忘 整理
  3. 安卓相对布局
  4. Android基本布局案例(2)
  5. android 常用布局公用属性

随机推荐

  1. Android(安卓)ARM 汇编学习(一)
  2. PullToRefresh的简单使用
  3. Android文件浏览器的开发
  4. Android ADB 端口占用问题解决方案
  5. android之实现底部TabHost
  6. android adb 通过adb连接制定设备
  7. Android上调用google map api v2
  8. android布局参照示例_约束布局Android示
  9. Android Studio:Fetching android sdk co
  10. android aidl