作者:李响

本文重点讲述了自android4.0版本号后新增的GridLayout网格布局的一些基本内容,并在此基础上实现了一个简单的计算器布局框架。通过本文,您可以了解到一些android UI开发的新特性,并可以实现相关应用。

在android4.0版本号之前,假设想要达到网格布局的效果,首先能够考虑使用最常见的LinearLayout布局,可是这种排布会产生例如以下几点问题:

1、不能同一时候在X,Y轴方向上进行控件的对齐。

2、当多层布局嵌套时会有性能问题。

3、不能稳定地支持一些支持自由编辑布局的工具。


其次考虑使用表格布局TabelLayout,这样的方式会把包括的元素以行和列的形式进行排列,每行为一个TableRow对象,也能够是一个View对象,而在TableRow中还能够继续加入其它的控件,每加入一个子控件就成为一列。可是使用这样的布局可能会出现不能将控件占领多个行或列的问题,并且渲染速度也不能得到非常好的保证。

android4.0以上版本号出现的GridLayout布局攻克了以上问题。GridLayout布局使用虚细线将布局划分为行、列和单元格,也支持一个控件在行、列上都有交错排列。而GridLayout使用的事实上是跟LinearLayout类似的API,仅仅只是是改动了一下相关的标签而已,所以对于开发人员来说,掌握GridLayout还是非常easy的事情。GridLayout的布局策略简单分为下面三个部分:

首先它与LinearLayout布局一样,也分为水平和垂直两种方式,默认是水平布局,一个控件挨着一个控件从左到右依次排列,可是通过指定android:columnCount设置列数的属性后,控件会自己主动换行进行排列。还有一方面,对于GridLayout布局中的子控件,默认依照wrap_content的方式设置其显示,这仅仅须要在GridLayout布局中显式声明就可以。

其次,若要指定某控件显示在固定的行或列,仅仅需设置该子控件的android:layout_row和android:layout_column属性就可以,可是须要注意:android:layout_row=”0”表示从第一行開始,android:layout_column=”0”表示从第一列開始,这与编程语言中一维数组的赋值情况类似。

最后,假设须要设置某控件跨越多行或多列,仅仅需将该子控件的android:layout_rowSpan或者layout_columnSpan属性设置为数值,再设置其layout_gravity属性为fill就可以,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。

利用GridLayout布局编写的简易计算器代码例如以下(注意:仅限于android4.0及以上的版本号):

<?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:orientation="horizontal"android:rowCount="5"android:columnCount="4" ><Buttonandroid:id="@+id/one"android:text="1"/><Buttonandroid:id="@+id/two"android:text="2"/><Buttonandroid:id="@+id/three"android:text="3"/><Buttonandroid:id="@+id/devide"android:text="/"/><Buttonandroid:id="@+id/four"android:text="4"/><Buttonandroid:id="@+id/five"android:text="5"/><Buttonandroid:id="@+id/six"android:text="6"/><Buttonandroid:id="@+id/multiply"android:text="×"/><Buttonandroid:id="@+id/seven"android:text="7"/><Buttonandroid:id="@+id/eight"android:text="8"/><Buttonandroid:id="@+id/nine"android:text="9"/><Buttonandroid:id="@+id/minus"android:text="-"/><Buttonandroid:id="@+id/zero"android:layout_columnSpan="2"android:layout_gravity="fill"android:text="0"/><Buttonandroid:id="@+id/point"android:text="."/><Buttonandroid:id="@+id/plus"android:layout_rowSpan="2"android:layout_gravity="fill"android:text="+"/><Buttonandroid:id="@+id/equal"android:layout_columnSpan="3"android:layout_gravity="fill"android:text="="/> </GridLayout>

终于实现的界面例如以下所看到的:

參考资料:http://tech.it168.com/a2011/1122/1277/000001277274.shtml

http://hb.qq.com/a/20111214/000865.htm

转载于:https://www.cnblogs.com/hrhguanli/p/4518244.html

浅谈android4.0开发之GridLayout布局相关推荐

  1. 浅谈Android样式开发之layer-list

    引言 在开发某些有层叠效果App时,我们第一个想到的就是让UI进行切图.下面我们来这样的一个例子.如图所示: 上图Tab的背景效果,和带阴影的圆角矩形,是怎么实现的呢?大部分的人会让美工切图,用点九图 ...

  2. 移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)

    移动web开发之rem布局 一.rem基础 rem单位 rem (root em)是一个相对单位,类似于em,em是父元素字体大小. 不同的是rem的基准是相对于html元素的字体大小. 比如,根元素 ...

  3. 17. 【移动Web开发之flex布局】

    文章目录 [移动Web开发之flex布局]前端小抄(17) 一.flex布局体验 1.1 传统布局与flex布局 1.2 初体验 二.flex布局原理 2.1 布局原理 三.flex布局父项常见属性 ...

  4. 「学习笔记」移动Web开发之flex布局9

    「学习笔记」移动Web开发之flex布局9 一.flex布局体验 1.1 传统布局与flex布局 1.2 初体验 二.flex布局原理 2.1 布局原理 三.flex布局父项常见属性 3.1 常见父项 ...

  5. 浅谈VB6.0中的实用技巧

    浅谈VB6.0中的实用技巧 (一) VB6.0中文本框处理技巧 在Visual Basic中,文本框(TextBox)是最常用的控件,熟练运用文本框 是开发出高质量的应用程序的基础.笔者在从事应用程序 ...

  6. Android应用开发之GridLayout(网格布局)

    GridLayout 网格布局是Android 4.0以后引入的一个新的布局. 它和前面所学的TableLayout(表格布局) 有点类似,不过有很多前者没有的东西,也更加好用. 特点: 可以自己设置 ...

  7. Android开发之GridLayout

    网格布局类似与前一篇博客讲的表格布局,但是更加灵活.支持表格布局做不到的行合并. 文章目录 基本框架 常见属性 子控件属性 基本框架 <?xml version="1.0" ...

  8. 浅谈响应式开发与自适应布局!

    谈到响应式,大家不自觉的会想到什么? 首先映入眼帘的便是随着网页宽度变化而网页内容呈现出不同内容的效果!那么由来是什么呢? 2009时间段,互联网发生了一件天大的事情! 那就是在北京时间2009年6月 ...

  9. css中如何实现帧布局_浅谈web前端中的表格布局与CSS盒子布局

    在web前端设计排版时我们可能会用到表格布局和div+CSS布局,但现在主要使用后者,为何?今天我们来谈一谈两者之间的发展和原理. 话不多说下面来干货 发展过程 上个世纪Web开发人员流行使用表格进行 ...

最新文章

  1. iOS 发布APP关于IDFA的相关内容
  2. 【Python】字典(Dictionary) items()方法
  3. Ansible管理节点过多导致的超时问题解决方法
  4. Memcached简介
  5. wsdl文档中的soap:address的生成规则_BAT大牛都在使用的数据库文档生成插件,不来看一下?...
  6. dtft变换的性质_[2018年最新整理]DTFT变换.ppt
  7. MongoDB语法与现有关系型数据库SQL语法比较
  8. 华三 h3c DHCP
  9. Tomcat9的新特性和Tomcat8的区别
  10. 如何绕过mac地址过滤_如何通过路由器来过滤无线MAC地址
  11. Android架构师能力素质模型
  12. 揭开宏的神秘面纱:什么是宏,为什么使用宏?
  13. html怎么把图做成3d效果,ps怎么制作立体效果 ps做图怎么做出立体的效果
  14. ds18b20c语言keil,DS18B20温度检测调节程序(C代码)
  15. 美团2021校招笔试-编程题-第10场
  16. 20多家银行加入“新加坡-香港”区块链贸易网络项目
  17. 还在为动态太大不能用发愁么?只需3步学会高效压缩GIF动图
  18. U盘乱码写保护如何处理
  19. Ucore Lab7
  20. [Unity3D]Unity3D游戏开发之MatchTarget实现角色攀爬效果

热门文章

  1. 柔性体没有应变_灌注式半柔性道面材料抗冲击性能试验研究
  2. hive不在同一台机 hue_环境篇:呕心沥血@CDH线上调优
  3. CATIA 界面介绍
  4. 使用zigbee的协议栈进行协调器路由器终端初始化
  5. 1主5从mysql数据库_MySQL主从复制虽好,能完美解决数据库单点问题吗?
  6. ddmmyy日期格式是多少_解锁9个日期时间计算套路,效率提高3.2%
  7. maven仲裁机制_maven仲裁机制
  8. java从键盘上录入学生人数和每个学生的姓名以及分数,按照分数降序输出,学生名次、学生姓名、学生分数
  9. html图片自动切换的幻灯片效果的,js带点自动图片轮播幻灯片特效代码分享
  10. linux vim 到底,真的有(很多)linux大牛用vim写项目吗?