UI篇--Android中TableLayout中的布局

    表格布局是按照行列来组织子视图的布局。表格布局包含一系列的Tablerow对象,用于定义行(也可以使用其它子对象)。表格布局不为它的行、列和单元格显示表格线。每个行可以包含个以上(包括)的单元格; 每个单元格可以设置一个View对象.与行包含很多单元格一样, 表格包含很多列。表格的单元格可以为空。TableLayout和我们平时在网页上见到的Table有所不同,TableLayout没有边框的,它是由多个TableRow对象组成,每个TableRow可以有0个或多个单元格,每个单元格就是一个View。这些TableRow,单元格不能设置layout_width,宽度默认是fill_parent的,只有高度layout_height可以自定义,默认是wrap_content。
    列的宽度由该列所有行中最宽的一个单元格决定.不过表格布局可以通过shrinkColumns和 stretchColumns两个属性来标记某些列可以收缩或可以拉伸. 如果标记为可以收缩,列宽可以收缩以使表格适合容器的大小。如果标记为可以拉伸, 列宽可以拉伸以占用多余的空间。表格的总宽度由其父容器决定. 记住列可以同时具有可拉伸和可收缩属性。最后,你还可以通过设置collapseColumns属性来隐藏列。
一、间隔线、合并单元格、隐藏单元格用法
     单元格可以为empty,并且通过android:layout_column可以设置index值实现跳开某些单元格。在TableRow之间,添加View,设置layout_height以及背景色,就可以实现一条间隔线。android:layout_span可以设置合并几个单元格:
<?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"> 

 

    <TableRow> 

        <TextView 

            android:text="column1" 

            android:padding="3dip"  /> 

        <TextView 

            android:text="column2" 

            android:padding="3dip"  /> 

        <TextView 

            android:text="column3" 

            android:padding="3dip"  /> 

    </TableRow> 

 

    <TableRow> 

        <TextView 

          android:text="column11" 

          android:visibility="invisible"/> //cell不见了 

        <TextView 

            android:text="左边的invisible" 

            android:gravity="right" 

            android:padding="3dip" /> 

        <Button 

            android:id="@+id/go" 

            android:text="go"  

            android:padding="3dip" /> 

        <Button 

            android:text="cancel" 

            android:padding="3dip" /> 

    </TableRow> 

 

    <View                               //间隔线 

        android:layout_height="2dip" 

        android:background="#F00" /> 

 

    <TableRow> 

        <TextView 

            android:text="右边的cell empty" /> 

        <TextView 

            android:layout_column="2" 

            android:text="跳开empty cell" 

            android:padding="3dip" /> 

    </TableRow> 

     

    <TableRow> 

        <TextView 

            android:text="合并3个单元格" 

            android:layout_span="3" 

            android:gravity="center_horizontal" 

            android:background="#FFC0C0C0" 

            android:textColor="#f00" 

            android:padding="3dip" /> 

    </TableRow> 

</TableLayout>

没有设置收缩/伸展效果

UI篇--Android中TableLayout中的布局

 注意,原来没有添加 android:padding="3dip" 的,发现那些column会凑在一起的,没有空白间隔!

另外,那个cancel按钮被挤到几乎看不见了,这时候需要使用android:shrinkColumns="可收缩的column",android:stretchColumns="可伸展的column"。

二、shrinkColumns和stretchColumns属性用法

     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()。
2.1可收缩效果:
<?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:shrinkColumns="0" > // 设置第一个column可收缩 

 

    <TableRow> 

        <TextView 

            android:text="column1" 

            android:padding="3dip"  /> 

        <TextView 

            android:text="column2" 

            android:padding="3dip"  /> 

        <TextView 

            android:text="column3" 

            android:padding="3dip"  /> 

    </TableRow> 

 

    <TableRow> 

        <TextView 

          android:text="column11" 

          android:visibility="invisible"/> 

        <TextView 

            android:text="左边的invisible" 

            android:gravity="right" 

            android:padding="3dip" /> 

        <Button 

            android:id="@+id/go2" 

            android:text="go2"  

            android:padding="3dip" /> 

        <Button 

            android:text="cancel" 

            android:padding="3dip" /> 

    </TableRow> 

 

    <View 

        android:layout_height="2dip" 

        android:background="#F00" /> 

 

    <TableRow> 

        <TextView 

          android:text="右边的cell empty" /> 

        <TextView 

            android:layout_column="2" 

            android:text="跳开empty cell" 

            android:padding="3dip" /> 

        <TextView 

            android:text="123456789" 

            android:padding="3dip" /> 

    </TableRow> 

</TableLayout> 

可收缩column效果

UI篇--Android中TableLayout中的布局

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

2.2可扩展效果

可伸展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效果

UI篇--Android中TableLayout中的布局

而动态隐藏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效果:

UI篇--Android中TableLayout中的布局

1.TableLayout下的代码及效果

<TableRow>  

        <TextView android:text="tmacsky" />  

        <TextView android:text="tmacsky" />  

        <TextView android:text="tmacsky" />  

    </TableRow>  

    <TableRow>  

        <Button android:text="tmacsky" />  

        <Button android:text="tmacsky" />  

        <Button android:text="tmacsky" android:layout_weight="1" />  

    </TableRow>  

    <TableRow>  

        <EditText />  

        <EditText />  

        <EditText android:layout_weight="1"/>  

</TableRow>


UI篇--Android中TableLayout中的布局

单个列布局中只能用layout_weight来拉宽,如果布局很多就有点繁琐了,所以得用到下面的stretchColumns伸缩列

2. Android:stretchColumns 伸缩列 

代码和效果:

<?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="wrap_content"  

    android:stretchColumns="0,1,2" >  //(此处表示第1,2,3列都拉宽屏幕)  

    <TableRow>  

        <TextView android:text="tmacsky1" />  

        <TextView android:text="tmacsky2" />  

        <TextView android:text="tmacsky3" />  

    </TableRow>  

    <TableRow>  

        <Button android:text="tmacsky1" />  

        <Button android:text="tmacsky2" />  

        <Button android:text="tmacsky3" />  

    </TableRow>  

    <TableRow>  

        <EditText />  

        <EditText />  

        <EditText />  

    </TableRow>  

</TableLayout> 

UI篇--Android中TableLayout中的布局

由此可以想象伸缩列其实就是用weight来封装的

3. android:collapseColumns缩进列

将第2个例子里的Android:stretchColumns缩进下加一行代码:

android:collapseColumns="0"

意思就是缩进第一列效果:

UI篇--Android中TableLayout中的布局

4,如果按钮里文字过多,则会出现下面这种情况

UI篇--Android中TableLayout中的布局

超出屏幕了;这个时候如果想让按钮里的文字换行不超出屏幕则可以:

 

在第二个例子的Android:stretchColumns添加一行代码:

android:shrinkColumns="2"

UI篇--Android中TableLayout中的布局

5.实现下面的效果

UI篇--Android中TableLayout中的布局

在第二个例子里的EditText代码改成这样:

<TableRow>

        <EditText android:layout_span="2"/>

        <EditText android:layout_column="2"/>

</TableRow>

Layout_span=2 伸展2

Layout_column=2  位置固定到第三列

你可能感兴趣的:(tablelayout)