`

使用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/

相关推荐

    安卓计算器开发实验报告.doc

    3. 在`src/weibo.test.ui`目录下创建`.java`文件,这里是实现计算器逻辑的地方,包括按钮点击事件的处理和计算算法的编写。 4. 在工程的不同文件中声明应用名称,例如在`AndroidManifest.xml`和`MainActivity.java`...

    Android 自定义View实现体育赛事积分表效果

    可以使用GridLayout或TableLayout,或者自定义布局管理器。 3. 文本绘制:使用Canvas.drawText()方法绘制队伍名和得分,注意调整字体大小、颜色和对齐方式。 4. 表格分割线:使用Canvas.drawLine()绘制行和列的分隔...

    4款Android游戏源码(连连看,推箱子,坦克大战,五子棋)

    同时,Android的生命周期管理和资源管理也是开发者需要注意的地方,确保游戏在不同设备和场景下运行稳定。 在学习和分析这些源码时,可以深入理解Android的事件处理机制、动画系统、多线程、数据持久化以及游戏开发...

Global site tag (gtag.js) - Google Analytics