在上一篇教程中http://blog.csdn.net/dawanganban/article/details/9952379,我们初步学习了解了GridLayout的布局基本知识,通过学习知道,GridLayout可以用来做一个象TableLayout这样的布局样式,但其性能及功能都要比tablelayout要好,比如GridLayout的布局中的单元格可以跨越多行,而tablelayout则不行,此外,其渲染速度也比tablelayout要快。在本文中,将指导读者进一步加深对GridLayout的认识,带大家实做一个简单的数字键盘布局,从中体会GridLayout的用法。
开始设计
首先,我们先设计下将要设计的键盘布局图,如下图:
可以看到这个布局的一些特点:
1) 有5行4列
2)每行的单元格和列方向的单元格的大小都是不一定相等的,比如“+”号这个按钮,在纵向上是横跨了两行的
可以看到,如果要用传统的tablelayout布局样式,要实现以上的布局,可能要外加嵌套linarlayout布局样式,这样就会使的布局设计十分麻烦,而如果有了GridLayout样式,则可以很容易地解决这些问题。
GridLayout布局策略
GridLayout布局样式和LinearLayout样式一样,可以有水平和垂直两个方向的布局方式。即如果设置为垂直方向布局,则下一个单元格将会在下一行的同一位置或靠右一点的位置出现,而水平方向的布局,则意味着下一个单元格将会在当前单元格的右边出现,也有可能会跨越下一行(因为有可能GridLayout布局样式中。在我们的这个例子中,如果从最右边的除号算起,使用水平布局的话则是4列,其代码如下所示:
<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"/>
………………………
运行后,可以看到一个初步的效果如下图所示:
美化页面布局
我们可以看到在上图中,依然出现了很多空位,跟我们预想的草稿图有一定差距,这里其实可以调整每个数字按钮中的位置即可,可以利用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>
运行后,结果如下图:
定义特殊符号的位置
可以看到,跟草稿的图相比,象除号,等于号等,位置不是很吻合,下面我们作些相应的调整,如下:
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个列的位置,因此另外重新新起一行进行了布局。运行后的结果如下图所示:
分享到:
相关推荐
参考博文: http://blog.csdn.net/joe_storm/article/details/13773125
Android移动应用开发网格布局GridLayout的特点.pdf 学习资料 复习资料 教学资源
Android移动应用开发网格布局GridLayout的常用属性.pdf 学习资料 复习资料 教学资源
网格布局标签是GridLayout。这个布局是android4.0新增的布局。这个布局只有4.0之后的版本才能使用。本文给大家介绍Android布局之GridLayout网格布局相关知识,感兴趣的朋友一起学习吧
主要介绍了Android开发之计算器GridLayout布局实现方法,结合实例形式分析了Android计算器界面布局及表达式计算相关操作技巧,需要的朋友可以参考下
Android使用GridLayout布局完成简易计算器界面设计的任务要求.pdf 学习资料 复习资料 教学资源
Android使用GridLayout布局完成图片放大器项目的代码清单.pdf 学习资料 复习资料 教学资源
记录了Android开发的历程,本DEMO是通过GridLayout布局编写了一个精美简易的计算器界面,暂时还没计算的功能,后续会补上
一个Activity掌握Android4.0新控件: Android4.0新控件Switch,Space,GridLayout,PopupMenu,TextureView的简单使用。
Android使用GridLayout布局完成图片放大器的要求说明.pdf 学习资料 复习资料 教学资源
Android中,GridLayout布局的基本使用以及对应的案例代码:计算器界面设计
GridLayout使用Demo(兼容4.0以下版本),可以在2.2,2.3上面使用Gridlayout的解决方案
GridLayout 布局管理 格子布局 详细解析应该很有用
LinearLayout 线性布局 控制组件 横向 或者 纵向 排列 ...GridLayout 网格布局 设置行列来装填控件 AbsoluteLayout 绝对布局 组件位置通过x, y坐标来控制, 布局容器不再管理组件位置, 大小, 这些都可以自定义;
Android应用开发
Android使用GridLayout布局完成简易计算器界面的代码清单.pdf 学习资料 复习资料 教学资源
1编写Application程序,在Frame中加入80个按钮,分20行4列,用GridLayout布局方式,按钮背景为黄色(Color.yellow),按钮文字颜色为红色(Color.red)。 2.设计一个简单计算器,如下图所示。在“操作数”标签右侧的两个...
android 的2048小游戏完整实现:GridLayout布局(android 4.0及以上)。 以前做过一个2048的算法题,学了几天android,觉得可以实现个安卓版的,也就动手写了个。 包含的东西: GridLayout布局 在activity中动态添加...