- 浏览: 168668 次
- 性别:
- 来自: 北京
最新评论
-
wangzhengfu:
看你这文章很纠结,既然把图贴出来了,为啥不贴上代码呢
android EditText 去除边框 -
sovio:
...
android EditText 去除边框 -
kdac:
啥J8翻译啊,谷歌翻译贴出来的吧?翻译不了就放原文,不伦不类, ...
android 弹出软键盘将底部视图顶起问题 -
shiny_txdd:
17:34:47,806 ERROR [ContextLoad ...
tomcat项目转jboss5.0 -
lenomon:
这里有篇实现无下划线的,Android使用TextView实现 ...
Android TextView中文字设置超链接、颜色、字体
Just like HTML Tables on webpages the TableLayout on Android gives you the option to align Views in a table order with rows and columns.
My development setup is:
IDE: Eclipse IDE (setup guide here
).
Phone: HTC Hero
Android version: 1.5 HTC Rom
I will be using the standard Android Project Skeleton in Eclipse as my base setup. This auto creates all the basic files needed, so these will not be covered here.
TableLayout on Android
The TableLayout is built using the TableLayout and the TableRow commands. There is no TableCols like the <td> tag in HTML. To align your view in columns you have to set the width of the elements and manually control the layout.
XML Layout
To make a basic layout with 2 rows and 4 textview I have a main.xml with this content:
<
TableLayout
android:id
=
"@+id/TableLayout01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
<
TableRow
android:id
=
"@+id/TableRow01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
<
TextView
android:id
=
"@+id/TextView01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 1-1"
></
TextView
>
<
TextView
android:id
=
"@+id/TextView02"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 1-2"
></
TextView
>
</
TableRow
>
<
TableRow
android:id
=
"@+id/TableRow02"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
<
TextView
android:id
=
"@+id/TextView03"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 2-1"
></
TextView
>
<
TextView
android:id
=
"@+id/TextView04"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 2-2"
></
TextView
>
</
TableRow
>
</
TableLayout
>
|
This creates a layout like this:
So we have now displayed a simple TableLayout.
Right aligning checkboxes
Many apps have a nice clean setup where the checkboxes is right aligned to the screen and this is actually very easy to achieve. You just have to set the width of the textview so it will push the checkbox to the right.
First step is to change the TextView02 to a Checkbox like this:
...
<
TextView
android:id
=
"@+id/TextView01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 1-1"
></
TextView
>
<
CheckBox
android:id
=
"@+id/CheckBox01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
></
CheckBox
>
|
This will output somethings like this:
Now we just have to align the checkbox.
We can do this by setting the width of the previous textfield like this:
<
TableRow
android:id
=
"@+id/TableRow01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
><
TextView
android:id
=
"@+id/TextView01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 1-1"
android:width
=
"250px"
></
TextView
>
|
Notice the width=”250px”
in the end there. This results in:
But what is the screen size changes? The checkbox will then be placed 250px from the left because the width is hardcoded. Not that great – but yet very easy to adjust.
On the LayoutTable we can adjust stretching across columns, similar to the colspan tag in HTML.
...
<
TableLayout
android:id
=
"@+id/TableLayout01"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:stretchColumns
=
"0"
>
...
|
This will make the first (“0″) column stretch as most as needed and allowed by the other elements.:
And with the screen flipped:
Complete XML layout:
<?
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
android:orientation
=
"vertical"
android:layout_width
=
"fill_parent"
android:layout_height
=
"fill_parent"
>
<
TableLayout
android:id
=
"@+id/TableLayout01"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:stretchColumns
=
"0"
>
<
TableRow
android:id
=
"@+id/TableRow01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
<
TextView
android:id
=
"@+id/TextView01"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 1-1"
></
TextView
>
<
CheckBox
android:id
=
"@+id/CheckBox01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
></
CheckBox
>
</
TableRow
>
<
TableRow
android:id
=
"@+id/TableRow02"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
<
TextView
android:id
=
"@+id/TextView03"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 2-1"
></
TextView
>
<
TextView
android:id
=
"@+id/TextView04"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 2-2"
></
TextView
>
</
TableRow
>
</
TableLayout
>
</
LinearLayout
>
|
Appending rows dynamically
Lets say you want to add rows to the TableLayout on depend during your app. No problem.
Add a button at the top of your application like this:
<
Button
android:id
=
"@+id/Button01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:text
=
"Add row"
></
Button
>
<
ScrollView
android:id
=
"@+id/ScrollView01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
<
TableLayout
android:id
=
"@+id/TableLayout01"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:stretchColumns
=
"0"
>
<
TableRow
android:id
=
"@+id/TableRow01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
>
<
TextView
android:id
=
"@+id/TextView01"
android:layout_width
=
"fill_parent"
android:layout_height
=
"wrap_content"
android:text
=
"textfield 1-1"
></
TextView
>
<
CheckBox
android:id
=
"@+id/CheckBox01"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
></
CheckBox
>
</
TableRow
>
</
TableLayout
>
</
ScrollView
>
|
There is now a button available for handling clicks from the user and the TableLayout has been wrapped in a ScrollView which enables the scroll functionality.
Now for some Java code
package
huuah.tablelayout;
import
android.app.Activity;
import
android.os.Bundle;
import
android.widget.TableLayout;
import
android.widget.TextView;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.CheckBox;
import
android.widget.TableRow;
import
android.widget.TableRow.LayoutParams;
public
class
tablelayout
extends
Activity
implements
OnClickListener {
/** Called when the activity is first created. */
//initialize a button and a counter
Button btn;
int
counter =
0
;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
// setup the layout
setContentView(R.layout.main);
// add a click-listener on the button
btn = (Button) findViewById(R.id.Button01);
btn.setOnClickListener(
this
);
}
// run when the button is clicked
public
void
onClick(View view) {
// get a reference for the TableLayout
TableLayout table = (TableLayout) findViewById(R.id.TableLayout01);
// create a new TableRow
TableRow row =
new
TableRow(
this
);
// count the counter up by one
counter++;
// create a new TextView
TextView t =
new
TextView(
this
);
// set the text to "text xx"
t.setText(
"text "
+ counter);
// create a CheckBox
CheckBox c =
new
CheckBox(
this
);
// add the TextView and the CheckBox to the new TableRow
row.addView(t);
row.addView(c);
// add the TableRow to the TableLayout
table.addView(row,
new
TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}
}
|
So whenever the button is clicked, it adds a new row to the TableLayout and notice the Scrollbar from the ScrollView.
If you want more information and TableLayout and placement techniques I can recommend reading:
Thats it for now. Enjoy coding and please post some comments.
原文:http://huuah.com/using-tablelayout-on-android/
发表评论
-
Android中canvas和paint的关系及使用
2011-11-30 10:15 2239刚刚开始接触学习Android的同鞋们在看到工程中出现的那么 ... -
Android 模仿renren的左右划动菜单栏
2011-11-10 13:47 2547模仿renren的左右划动菜单栏,主要通过Horizo ... -
android 抓包
2011-07-12 10:28 39691、下载TcpDump for Android ,或者本地下 ... -
Android参数设置父布局集体宽高
2011-06-21 11:47 3419LinearLayout gridContainer = (L ... -
Android应用按返回键完全退出应用
2011-06-07 17:58 7220很多网友可能发现自己 ... -
GIT和repo使用方法,下载android-2.6.29内核
2011-06-07 14:45 1984http://hi.baidu.com/kkernel/ ... -
如何申请 android google map API key
2011-06-01 15:16 16111.首先要得到你的debug keystore位置: 打 ... -
Android TextView中文字设置超链接、颜色、字体
2011-05-27 12:27 5376TextView是用来显示文本的,有时需要给TextView中 ... -
设置ProgressBar的颜色
2011-05-26 10:05 2250在《Android/OPhone开发完全讲义》 ... -
Android 调用系统的照相,浏览图片,转存并裁剪!
2011-05-25 12:59 4595public class AddCardActivity ex ... -
修改TabHost默认样式
2011-05-10 13:52 3195TabHost是Android提供的一个容器组件, ... -
Android控件美化Shape
2011-05-04 09:59 1205当然除了使用drawable这样的图片外今天谈下自定义图形 ... -
android开发中WebView的使用(附完整程序)
2011-05-03 14:00 2107WebView是个好东西,作用相当于一个迷你的浏览器,采用We ... -
android 弹出软键盘将底部视图顶起问题
2011-04-19 13:20 6946今天要做一个搜索功能,搜索界面采用AutoCompleteTe ... -
自定义ListView行间的分割线
2011-04-18 10:18 1603在Android平台中系统控件提供了灵活的自定义选项,所有 ... -
android xml中应用占位符
2011-04-02 18:24 1559Formatting and Styling Here ar ... -
android Toast大全(五种情形)建立属于你自己的Toast
2011-04-02 18:18 932Toast用于向用户显示一些帮助/提示。下面我做了5中效果,来 ... -
JadEclipse工具的使用
2011-04-01 11:49 2561JadEclipse工具的使用 1、下载工具 JadEcl ... -
Android 反编译apk 到java源码的方法
2011-04-01 11:20 964Android由于其代码是放在dalvik虚拟机上的托管代码, ... -
Android dex ,xml 文件反编译方法【转】
2011-04-01 11:19 1514Dex 文件是Android上运行于delvik的java二进 ...
相关推荐
首先,让我们详细讨论如何动态增加和删除列。`TableLayoutPanel`默认创建时可能只有预设的列数,但可以通过编程方式动态调整。增加列可以使用`Columns`集合的`Add`方法,例如: ```csharp TableLayoutPanel ...
- 为了性能优化,避免在TableLayout中使用过多的View,尤其是复杂的View,因为这会导致布局解析和绘制时间增加。 - 在表格的列宽设置上要谨慎,合理使用`android:stretchColumns`,以确保在不同设备和屏幕尺寸上的...
`TableLayout.jar`是一个强大的布局管理器,它为开发者提供了一种灵活且易于使用的工具,能够实现与`GridBagLayout`相同的功能,但使用起来却更为简洁,几乎不增加额外的学习难度,相比`GridLayout`,`TableLayout`...
需要注意的是,虽然TableLayout提供了强大的布局能力,但在处理动态数据或大量数据时,使用ListView或RecyclerView可能会更高效,因为它们有更好的滚动性能和内存管理。然而,在需要简单表格布局的场景下,...
1. **伸缩行和列(Stretchable Rows and Columns)**:TableLayout可以自动拉伸行或列来填充剩余的空间,这通过`android:stretchColumns`和`android:shrinkColumns`属性实现。当设置某个列为可伸展时,该列将在空间...
这样可以在运行时根据需要动态地增加表格行。例如: ```java TableRow row = new TableRow(context); TextView textView = new TextView(context); textView.setText("新行数据"); row.addView(textView); ...
- 嵌套支持:TableLayout可以嵌套在其他布局中,如LinearLayout或RelativeLayout,增加布局的复杂性和灵活性。 2. **表格布局的属性**: - `android:stretchColumns`:指定哪些列应该拉伸以填充可用空间。默认...
动态添加行意味着我们需要在运行时创建`TableRow`对象,并将其添加到`TableLayout`中。这通常在Java代码中完成,而不是在XML布局文件中预定义。 2. **创建`TableRow`**:`TableRow`是`LinearLayout`的子类,所以它...
TableLayout可以容纳更多的`TableRow`,每行可以添加任意数量的`View`,如`TextView`、`ImageView`或自定义控件。通过调整`TextView`的属性,可以实现不同样式的单元格。例如,可以使用`android:textStyle`设置文本...
- 在XML布局文件中,使用`<TableLayout>`标签开始布局,然后添加`<TableRow>`作为行,接着在每行内添加3个`<TextView>`。 - 使用属性如`android:textSize`、`android:textColor`、`android:background`、`android:...
- **可折叠/展开的行**:通过增加状态管理和动画效果,实现类似树形结构的表格。 - **多选和排序功能**:添加选择框和手势操作,允许用户进行多行选择和列排序。 - **自适应列宽**:根据单元格内容自动调整列宽,以...
创建一个简单的动态表格,首先在XML布局文件中添加TableLayout,然后在Activity中创建并添加TableRow,每行中添加TextView。例如: ```java TableLayout table = findViewById(R.id.table); for (int i = 0; i ;...
TableLayout是LinearLayout的一个子类,继承了其线性排列的特性,但增加了表格布局的能力。在Android中,TableLayout由多个TableRow组成,每个TableRow可以包含多个View,这些View相当于表格中的单元格。通过调整...
### Android开发之动态生成表格及其边框 #### 一、引言 在Android应用开发过程中,经常需要根据...此外,还可以进一步扩展此功能,比如增加对单元格数据的动态更新、支持滚动条等高级特性,以满足更复杂的业务场景。
- TableLayout由一个或多个TableRow组成,每个TableRow代表表格的一行。 - 表格中的列宽会根据其内容自动调整,但也可以通过设置权重(weight)来分配固定宽度。 - 默认情况下,TableLayout会尽可能填充其父视图...
3. **Span属性**:TableLayout中的View可以通过设置`android:layout_span`属性跨多列显示,增加界面的灵活性。 4. **权重(weight)分配**:在TableRow中,可以为View分配权重,以便根据权重比例自动调整大小,尤其...
3. **动态添加与删除单元格**:MyTableLayout通常会支持在运行时动态增加或删除单元格,这就需要实现添加、删除View的方法,并确保布局更新的正确性。 4. **事件处理**:自定义布局可能需要处理各种触摸事件,例如...
- 添加行:在Adapter中增加一个方法,比如`addRow(List<String> rowData)`,接收一行数据,更新Adapter的数据源并调用`notifyDataSetChanged()`通知ListView刷新。 - 添加列:可以考虑创建一个二维数组或者自定义...
TableLayout支持动态添加行和列,并且可以根据内容自动调整大小。 在创建MyTableLayout的过程中,开发者可能面临了一些挑战,比如: 1. **性能优化**:原生TableLayout在处理大量数据时可能会出现性能瓶颈,尤其是...
`TableLayout`是Android提供的一个视图布局,它允许开发者创建类似电子表格的布局,由多个行(`TableRow`)组成,每行可以包含多个列。在`TableLayout`中,每个`TableRow`都是一行,而`TableRow`内部可以添加各种...