【IT168技术】在最新的Android 4.0 SDK中,新引入了GridLayout的布局样式,这个布局样式看上去可能有点象以前的TableLayout,但实际上仍是有所不一样的。 html
在上一篇教程中(http://tech.it168.com/a2011/1122/1277/000001277274.shtml),咱们初步学习了解了GridLayout的布局基本知识,经过学习知道,GridLayout能够用来作一个象TableLayout这样的布局样式,但其性能及功能都要比tablelayout要好,好比GridLayout的布局中的单元格能够跨越多行,而tablelayout则不行,此外,其渲染速度也比tablelayout要快。在本文中,将指导读者进一步加深对GridLayout的认识,带你们实作一个简单的数字键盘布局,从中体会GridLayout的用法。 android
开始设计 布局
首先,咱们先设计下将要设计的键盘布局图,以下图: 性能
能够看到这个布局的一些特色: 学习
1) 有5行4列 设计
2)每行的单元格和列方向的单元格的大小都是不必定相等的,好比“+”号这个按钮,在纵向上是横跨了两行的 xml
能够看到,若是要用传统的tablelayout布局样式,要实现以上的布局,可能要外加嵌套linarlayout布局样式,这样就会使的布局设计十分麻烦,而若是有了GridLayout样式,则能够很容易地解决这些问题。 htm
GridLayout布局策略 教程
GridLayout布局样式和LinearLayout样式同样,能够有水平和垂直两个方向的布局方式。即若是设置为垂直方向布局,则下一个单元格将会在下一行的同一位置或靠右一点的位置出现,而水平方向的布局,则意味着下一个单元格将会在当前单元格的右边出现,也有可能会跨越下一行(由于有可能GridLayout布局样式中。在咱们的这个例子中,若是从最右边的除号算起,使用水平布局的话则是4列,其代码以下所示: utf-8
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:columnCount="4"
android:orientation="horizontal" >
</GridLayout>
定义简单的单元格
在GridLayout中,定义每一个子控件跟之前使用布局中定义的方法有点不一样,默认的是对全部的子控件使用wrap_content的方式,而不是显式声明宽度和高度并使用wrap_conent和match_parent,更多的相关规则能够参考GridLayout的文档,这里只须要在GridLayout自己的属性中,定义android:layout_width 均为wrap_conent便可。
所以,咱们接着在控件中,添加各个数字按钮,以下:
<Button android:text="1" />
<Button android:text="2" />
………………………
运行后,能够看到一个初步的效果以下图所示:
定义特殊符号的位置
能够看到,跟草稿的图相比,象除号,等于号等,位置不是很吻合,下面咱们做些相应的调整,以下:
1) 除号的大小能够不变,但它应该被放置在第4列出现
2) +号应该放在数字9以后,而且它的高度要占3行之多
3) 数字0应该占据两列的宽度
4) 等于号应该占据三列
为此,修改代码以下:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:columnCount="4"
android:orientation="horizontal" >
<Button
android:layout_column="3"
android:text="/" />
<Button android:text="1" />
<Button android:text="9" />
<Button
android:layout_rowSpan="3"
android:text="+" />
<Button
android:layout_columnSpan="2"
android:text="0" />
<Button android:text="00" />
<Button
android:layout_columnSpan="3"
android:text="=" />
</GridLayout>
在上面的代码中,能够看到,数字键3中,经过使用android:layout_column="3"指定数字从第4列开始(注意列的序号从0开始),而+号是紧跟在数字键9后,而且用android:layout_rowSpan="3"指出位于第4行,符号等于,则是紧跟着在数字“00”后,因为其layout_columnSpan=3,能够看到,占据了3个列的位置,所以另外从新新起一行进行了布局。运行后的结果以下图所示:
美化页面布局
咱们能够看到在上图中,依然出现了不少空位,跟咱们预想的草稿图有必定差距,这里其实能够调整每一个数字按钮中的位置便可,能够利用android 4.0 GridLayout布局中的
layout_gravity属性,设置每一个按钮中的位置,只须要设置layout_gravity属性为fill,便可将每一个控件填充到其layout_columnSpan及layout_rowSpan所指定的宽度,修改后的代码以下所示:
<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:columnCount="4"
android:orientation="horizontal" >
<Button
android:layout_column="3"
android:text="/" />
<Button android:text="1" />
<Button android:text="2" />
<Button android:text="3" />
<Button android:text="*" />
<Button android:text="4" />
<Button android:text="5" />
<Button android:text="6" />
<Button android:text="-" />
<Button android:text="7" />
<Button android:text="8" />
<Button android:text="9" />
<Button
android:layout_gravity="fill"
android:layout_rowSpan="3"
android:text="+" />
<Button
android:layout_columnSpan="2"
android:layout_gravity="fill"
android:text="0" />
<Button android:text="00" />
<Button
android:layout_columnSpan="3"
android:layout_gravity="fill"
android:text="=" />
</GridLayout>
运行后,结果以下图: