`

使用TableLayout应该注意的地方

阅读更多
4.0之后推荐使用GridLayout代替TableLayout
详情见:
浅谈android4.0开发之GridLayout布局

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="1dip"以及背景色,就可以实现一条分割线。android:layout_span可以设置合并几个单元格。

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()。

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

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

为何不能动态生成TableLayout ?
是否有时候会碰到这样的情景

另一个问题:
关于TableLayout和HorizontalScrollView一起使用时的宽度问题
     我有一个TableLayout,它的内容是动态生成的。我遇到了下面的问题:
     当动态生成的一行的内容太长时,靠右边的内容会被遮住了。于是我想要这个TableLayout在横向上可以滚动。
     解决的办法是,用HorizontalScrollView包装TableLayout,这样,当内容很长时,就会出现横向滚动条。
    像这样:
<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)
分享到:
评论
2 楼 mynamelzk 2012-10-08  
谢谢,都是很重要的知识点
1 楼 lenomon 2012-04-02  
有时间看看这个,希望对你有帮助 http://orgcent.com/android-vertical-horizontal-scroll-textview/

相关推荐

    Android使用TableLayout动态布局实例

    本篇文章将深入探讨如何使用`TableLayout`进行动态布局,结合实例来理解其用法。 `TableLayout`是`LinearLayout`的扩展,它允许开发者创建表格结构,由多个`TableRow`组成,每个`TableRow`类似HTML中的`tr`元素,...

    TableLayout使用方法

    需要注意的是,尽管 TableLayout 在早期版本的 Android 应用中较为常用,但对于复杂的数据展示,建议考虑使用更现代的布局方案,如 RecyclerView 配合 GridLayoutManager 或 GridLayoutManager 来实现类似的效果,以...

    Android TableLayout实现边框

    本教程将深入探讨如何在Android应用中使用TableLayout来实现边框效果,同时结合提供的源码进行分析。 首先,TableLayout是LinearLayout的一个子类,它允许你通过TableRow组件来组织内容,形成行列结构。在XML布局...

    TableLayout的使用

    本文将详细介绍TableLayout的基本用法以及如何在设计中使用选项卡。 ### TableLayout的基础知识 1. **结构**:TableLayout由一个或多个TableRow组成,每个TableRow代表表格的一行。TableRow中可以包含一个或多个...

    tablelayout实现表格效果

    要使用TableLayout,首先需要在XML布局文件中添加TableLayout元素,然后在其中嵌套TableRow元素。以下是一个简单的例子: ```xml &lt;TableLayout xmlns:android="http://schemas.android.com/apk/res/android"&gt; ...

    TableLayout

    java TableLayout布局

    用TABLELAYOUT做表格

    本文将详细介绍如何使用TableLayout来构建一个功能完善的表格,并提供一些最佳实践和注意事项。让我们一起深入探讨这个主题。 首先,TableLayout是Android SDK中的一个视图容器,它允许开发者以二维表格的形式组织...

    TableLayout,实现动态添加和删除行,并实现统计表格中的数据

    在这个场景中,我们将深入探讨如何使用TableLayout动态添加和删除行,以及如何实现数据的统计。 1. **动态添加和删除行** 在TableLayout中,每一行是由TableRow对象构成的。要动态添加行,首先需要创建一个新的...

    安卓 tablelayout布局实例

    在本教程中,我们将深入探讨`TableLayout`的使用,包括其基本概念、属性以及如何在实际项目中创建和操作表格布局。 `TableLayout`是Android `LinearLayout`的一个子类,它提供了行列结构来排列子视图,通常这些子...

    tablelayout for swing

    1. `Table.java`:可能是一个自定义的表格组件,用于演示或配合TableLayout使用。 2. `DiagonalLayout.java`:可能是一个与TableLayout类似的布局管理器,但支持对角线方向的布局。 3. `SwingToolkit.java`:可能是...

    TableLayout实现gridview嵌套gridview效果

    总之,`TableLayout`与`GridView`的嵌套使用能够帮助我们创建复杂且有层次的用户界面,但需要注意布局的管理和滚动行为的控制,以保证用户体验的流畅性和一致性。同时,自定义适配器和事件处理是实现这种效果的核心...

    android操作Sqlite,使用tablelayout做自适应显示

    本项目"android操作Sqlite,使用tablelayout做自适应显示"主要展示了如何在Android应用中集成SQLite数据库,以及利用TableLayout进行动态数据显示。下面我们将深入探讨相关知识点。 首先,SQLite数据库在Android中...

    018集-TableLayout视频教程

    在本视频教程中,讲师深入浅出地介绍了TableLayout的工作原理、使用方法及其在实际应用中的重要性。 TableLayout继承自GridLayout,它允许开发者以二维表格的形式组织View组件,通常包括行(rows)和列(columns)...

    TableLayout数据显示

    TableLayout有一个特殊的属性`android:stretchColumns`,它可以指定哪些列应该拉伸以填满可用空间。这对于创建自适应的表格布局非常有用。 5. **ShrinkColumns**: 类似地,`android:shrinkColumns`属性可以指定...

    利用TableLayout自定义可点击表格

    4. **自定义样式**:为了使表格更美观,可以使用CSS样式(`style.xml`)为`TableLayout`、`TableRow`以及单元格设置背景色、边框等属性。 5. **动态加载数据**:如果数据是从服务器获取的,可以通过`Adapter`和`...

    Android UI LinearLayout权限级别与TableLayout混合使用,

    在Android UI设计中,`LinearLayout`和`TableLayout`是两种常见的布局管理器,它们各自有不同的特点和使用场景。在实际开发中,我们有时需要将它们混合使用,以实现更复杂的界面布局。本文将深入探讨`LinearLayout`...

    TableLayout不显示列

    通过分析代码和调整布局参数,你应该能够理解TableLayout的工作机制,并解决不显示列的问题。同时,这个项目也可以作为一个参考,帮助你在未来的开发中避免类似的陷阱。记住,熟悉并熟练掌握TableLayout的用法对于...

    TableLayout程序生成

    5. **使用场景**:TableLayout通常用于创建具有网格样式的用户界面,如表格数据展示、选项卡式布局或有规则的多列布局。 6. **动态添加行**:在代码中,你可以动态地创建和添加TableRow,以在运行时构建表格。这...

    TableLayout.zip

    5. **嵌套布局**:与其他布局管理器一样,TableLayout可以与其他布局管理器结合使用,实现更复杂的布局需求。例如,可以在TableLayout的一个单元格中嵌入一个BorderLayout或GridLayout。 6. **灵活性**:...

    tablelayout, 基于表的Java UI工具箱布局.zip

    tablelayout, 基于表的Java UI工具箱布局 请使用 TableLayout讨论组的支持。概述TableLayout是一个轻量级的Java库,它使用逻辑 table 来设置UI小部件的位置和大小,类似于HTML表。 TableLayout的核心是 UI,它支持 ...

Global site tag (gtag.js) - Google Analytics