Android开发中TableLayout表格布局

一、引言

在移动端应用程序开发中,常常会使用到表格布局,iOS和Android开发框架中都提供了独立的表格视图控件供开发者使用,例如iOS中的UITableView、UICollectionView,Android中的ListView、GridView等。除了独立的视图控件外,Android中还提供了一个布局容器类TableLayout,使用其也可以进行方便的表格布局。

前边博客有介绍过关于LinearLayout线性布局的相关内容,LinearLayout只能进行水平或者垂直方向上的排列布局,使用LinearLayout的布局嵌套,实际上也可以实现表格布局的样式。实际上,TableLayout就是采用这样的原理,TableLayout继承于LinearLayout,其中每个视图元素作为一行,同时Android中还提供了一个TableRow类,这个类同样继承自LinearLayout,其中每个视图元素作为当前行中的一列,结合使用TableLayout与TableRow,就实现了行列的表格布局。

二、关于TableRow

TableRow可以简单理解为TableLayout布局中的一行,当然,TableLayout中也可以直接添加任意的View视图,但是默认添加的View视图将独占一行。TableRow中可以添加其他视图,每个视图被作为一列处理,通过TableRow的内部类LayoutParams来设置TableRow内部视图的布局方式,其中主要可以通过设置宽高或者设置权重来定制每列视图元素的尺寸,例如:

TableLayout tableLayout = new TableLayout(this);

//创建行 第一行用单个元素

TextView textView = new TextView(this);

textView.setText("1000");

textView.setTextSize(20);

textView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_END);

tableLayout.addView(textView);

//第二行使用TableRow

TableRow tableRow1 = new TableRow(this);

//设置本行中每一列的权重和

tableRow1.setWeightSum(10);

Button button11 = new Button(this);

button11.setText("AC");

//设置固定宽高

TableRow.LayoutParams layoutParams1 = new TableRow.LayoutParams(300,200);

button11.setLayoutParams(layoutParams1);

tableRow1.addView(button11);

Button button12 = new Button(this);

//通过权重设置列的宽度 占正常列宽的一半

TableRow.LayoutParams layoutParams2 = new TableRow.LayoutParams(0,200,5);

button12.setLayoutParams(layoutParams2);

button12.setText("+/-");

tableRow1.addView(button12);

Button button13 = new Button(this);

button13.setText("%");

tableRow1.addView(button13);

Button button14 = new Button(this);

button14.setText("÷");

tableRow1.addView(button14);

tableLayout.addView(tableRow1);

上面代码向TableRow中添加了4个视图,默认情况下会生成四列,setWeightSum()方法用于设置每列的权重和,需要注意,它作用的对象是每一列元素,而不是整行。上面的代码效果如下:

默认的列宽是评分整个行宽,可以通过指定宽度或者权重来修改特定列的列宽。

还有一点需要注意,如果一个TableLayout布局中多个TableRow,则表格的列数会以最多列的一行为准,例如在添加一行TableRow,而其中只有一列,则其依然会预留4列的位置,示例如下:

TableRow tableRow2 = new TableRow(this);

Button button = new Button(this);

button.setText("跳过");

tableRow2.addView(button);

tableLayout.addView(tableRow2);

效果如下:

也可以设置跳过某列进行布局,或者进行列的合并,示例如下:

TableRow tableRow2 = new TableRow(this);

Button button = new Button(this);

button.setText("跳过");

TableRow.LayoutParams layoutParams21 = new TableRow.LayoutParams();

//从第2列开始

layoutParams21.column = 1;

//合并3列

layoutParams21.span = 3;

button.setLayoutParams(layoutParams21);

tableRow2.addView(button);

tableLayout.addView(tableRow2);

三、关于TableLayout

在向TableLayout容器中添加或者移除视图的时候,开发者可以对其进行监听,示例如下:

TableLayout tableLayout = new TableLayout(this);

tableLayout.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {

@Override

public void onChildViewAdded(View parent, View child) {

Toast.makeText(getBaseContext(),"add",Toast.LENGTH_SHORT).show();

}

@Override

public void onChildViewRemoved(View parent, View child) {

Toast.makeText(getBaseContext(),"remove",Toast.LENGTH_SHORT).show();

}

});

开发者还可以对表格中视图元素的一些尺寸自适应做一些设置,其中还有一些常用的方法列举如下:

//获取表格中所有列是否是可收缩的

public boolean isShrinkAllColumns()

//设置表格中的所有列是否可收缩

public void setShrinkAllColumns()

//获取表格中的所有列是否可拉伸

public boolean isStretchAllColumns()

//设置表格中的所有列是否可拉伸

public void setStretchAllColumns()

//设置某一列是否可拉伸

public void setColumnStretchable(int columnIndex, boolean isStretchable)

//获取某一列是否可拉伸

public boolean isColumnStretchable(int columnIndex)

//设置某一列是否可收缩

public void setColumnShrinkable(int columnIndex, boolean isShrinkable)

//获取某一列是否可收缩

public boolean isColumnShrinkable(int columnIndex)

所谓可收缩的列,是指如果此列的内容宽度超出一定宽度,为了使后面的列内容展示出来,此列宽度会自动收缩,高度会增加,如下图所示:

至于可拉伸的列,是指如果此行内容内有充满整行,此列会进行拉伸自动充满。

下面这些方法与表格中列的隐藏有关:

//设置某列是否隐藏

public void setColumnCollapsed(int columnIndex, boolean isCollapsed)

//获取某列是否被隐藏

public boolean isColumnCollapsed(int columnIndex)

需要注意,在TableLayout中也定义了一个LayoutParams的内部类,其用于设置其中每一行视图元素的布局,但是开发者只能设置此布局类对应的高度参数,宽度将强制设置为MATCH_PARENT。

专注技术,热爱生活,交流技术,也做朋友。

——珲少 QQ群:435043639

android简单实现表格布局,Android开发中TableLayout表格布局相关推荐

  1. android 继承relativelayout,Android开发中RelativeLayout相对布局

    Android开发中RelativeLayout相对布局 RelativeLayout布局是Android界面布局中应用最广也最强大的一种布局,其不只十分灵活,能够解决开发中各类界面布局需求,同时也很 ...

  2. Android事件分发机制在实战开发中的应用之二

    学习的最终目标就是要学以致用,本文所分享的案例都是自己在公司实战开发过程中的真实案例,现在把它分享出来,希望对初学者有所帮助 版权声明:本文来自门心叼龙的博客,属于原创内容,转载请注明出处:https ...

  3. Android事件分发机制在实战开发中的应用之一

    学习的最终目标就是要学以致用,本文所分享的案例都是自己在公司实战开发过程中的真实案例,现在把它分享出来,希望对初学者有所帮助 版权声明:本文来自门心叼龙的博客,属于原创内容,转载请注明出处:https ...

  4. Android开发中几种布局方式介绍

    转自:http://www.jianshu.com/p/3021a7beed53 今天我们的主要内容就是安卓的主要几个基础的布局方式.(主要布局如下:) 1.线性布局(LinerLayout) 2.相 ...

  5. Android布局管理器-使用TableLayout表格布局管理器实现简单的用户登录页面

    场景 Android布局管理器-使用FrameLayout帧布局管理器显示层叠的正方形以及前景照片: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  6. android简单的有道词典开发

    简单的android有道词典开发 第一次写教程,不好勿怪哈!其实想写这篇教程已经很久了,但却一直没有付诸行动,这个项目是偶然间在论坛里发现的,我算是弄出来整理了一下吧!所以在此要感谢那些前辈们,没有他 ...

  7. android 如何制作可编辑的表格,在手机wps中编辑表格的方法

    我们可以在手机版本的wps中对表格进行编辑,对于新手来说可能不知如何操作,下面就让学习啦小编告诉你如何在手机wps中编辑表格的方法,希望对大家有所帮助. 在手机wps中编辑表格的方法 首先,下载并安装 ...

  8. android简单登录自定义密码,Android自定义UI手势密码简单版

    先看看效果图: ImageLockActivity package com.example.imagelock; import com.example.view.NinePointLineView; ...

  9. 盒模型和开发中常用的布局

    目录 1. 有关盒子模型的css属性 1.1列表的样式 2.浮动布局 2.1 HTML元素的分类 2.2 display属性 2.3 伪元素清除浮动 3 flex布局 3.1 含义 3.2 设置fle ...

最新文章

  1. 炼一项专业技能c语言,C语言程序设计_安徽新华电脑专修学院
  2. leetcode1052. 爱生气的书店老板(滑动窗口)
  3. ubuntu16.04源码安装node
  4. 泰拉瑞亚试图加载不正确的_盘点那些著名的沙盒游戏?泰拉瑞亚堪称2D沙盒之王...
  5. Fedora17安装SSH
  6. sql server 2005 几个常用的存储过程或函数
  7. Emacs lisp函数调用defun(五)
  8. 陈纪修老师《数学分析》 第09章:数项级数 笔记
  9. 实验九 TCP 协议分析实验
  10. 【163】VS2022调试通过海康明眸门禁报警事件中的报警布防C++示例代码
  11. 慕课课程《简明世界史》课堂笔记二
  12. 引入高速缓存的目的_计算机中高速缓存的作用?
  13. 多元统计分析R语言建模| 1 多元数据的数学表达
  14. unity2d 投影_Unity Projector 投影器原理以及优化
  15. 大一c语言论文700字,大二学年学生自我鉴定范文700字
  16. Pygame实战:这款“欢乐打地鼠”小游戏让几亿人“上瘾“?不玩绝对是你的损失。
  17. PAML中文文档/计算分子进化
  18. 新浪微博定位页面代码解析
  19. Linux创建普通用户
  20. 五脏六腑等最喜欢的食物

热门文章

  1. python下载b站视频_爬虫可以当是一个批量下载工具!用Python批量下载B站视频
  2. Windows 11 家庭版、专业版、企业版、教育版、SE 版之间的区别
  3. HDFS名字空间(NameSpace)
  4. mac safari无法连接服务器_safari浏览器不能连接服务器什么意思苹果电脑
  5. 前端背景图放置_CSS 背景图片排版
  6. web一些实用的网址(免费API、美图、实用工具)
  7. 使用TFS2010管理敏捷项目生命周期-系列指南5 TFS 故事墙(Story Wall)-看板(Dashboard)-Workbrench使用
  8. UML用例图-用例图
  9. kermit的安装、配置、使用 .
  10. 【Java】广州三本秋招之路