Android 4.0开发之GridLayOut布局实践

Android 4.0开发之GridLayOut布局实践在上一篇教程中http://blog.csdn.net/dawanganban/article/details/9952379,我们初步学习了解了GridLayout的布局基本知识,通过学习知道,GridLayout可以用来做一个象TableLayout这样的布局样式,但其性能及功能都要比tablelayout要好,比如GridLayout的布局中的单元格可以跨越多行,而tablelayout则不

大家好,又见面了,我是你们的朋友全栈君。

在上一篇教程中http://blog.csdn.net/dawanganban/article/details/9952379,我们初步学习了解了GridLayout的布局基本知识,通过学习知道,GridLayout可以用来做一个象TableLayout这样的布局样式,但其性能及功能都要比tablelayout要好,比如GridLayout的布局中的单元格可以跨越多行,而tablelayout则不行,此外,其渲染速度也比tablelayout要快。在本文中,将指导读者进一步加深对GridLayout的认识,带大家实做一个简单的数字键盘布局,从中体会GridLayout的用法。

  开始设计

  首先,我们先设计下将要设计的键盘布局图,如下图:

Android 4.0开发之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布局实践

美化页面布局

  我们可以看到在上图中,依然出现了很多空位,跟我们预想的草稿图有一定差距,这里其实可以调整每个数字按钮中的位置即可,可以利用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
>

  运行后,结果如下图:


Android 4.0开发之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个列的位置,因此另外重新新起一行进行了布局。运行后的结果如下图所示:

Android 4.0开发之GridLayOut布局实践

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140005.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据归一化和两种常用的归一化方法

    数据归一化和两种常用的归一化方法数据标准化(归一化)处理是数据挖掘的一项基础工作,不同评价指标往往具有不同的量纲和量纲单位,这样的情况会影响到数据分析的结果,为了消除指标之间的量纲影响,需要进行数据标准化处理,以解决数据指标之间的可比性。原始数据经过数据标准化处理后,各指标处于同一数量级,适合进行综合对比评价。以下是两种常用的归一化方法:一、min-max标准化(Min-MaxNormalization)也称为离差标准…

    2022年6月23日
    22
  • navicat在线生成激活码【最新永久激活】

    (navicat在线生成激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~83PV…

    2022年3月27日
    328
  • SQL 扩展事件

    SQL 扩展事件

    2021年11月26日
    48
  • js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播

    js addEventListener事件捕获与冒泡,第三个参数详解,阻止事件传播结论element.addEventListener(event,function[,useCapture])event:事件名称,如clickfunction:指定要事件触发时执行的函数,可以传入事件参数useCapture:可选。布尔值,指定事件是否在捕获或冒泡阶段执行。默认false:在冒泡阶段执行指定事件true:在捕获阶段执行事件event.stopPropagat…

    2025年6月9日
    1
  • 国内 Go 代理汇总

    国内 Go 代理汇总golang国内的代理总是一个很头疼的问题,这里汇总一下国内几个可用的代理,到时候有些包下不下来就换几个代理多试试代理1:阿里云GoModule代理传送门:https://mirrors.aliyun.com/goproxy/简介gomodule公共代理仓库,代理并缓存go模块。你可以利用该代理来避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建使用帮助使用go1…

    2022年7月26日
    9
  • 内点法[通俗易懂]

    内点法[通俗易懂]内点法属于约束优化算法。约束优化算法的基本思想是:通过引入效用函数的方法将约束优化问题转换成无约束问题,再利用优化迭代过程不断地更新效用函数,以使得算法收敛。内点法(罚函数法的一种)的主要思想是:

    2022年8月4日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号