Android 4.0开发之GridLayOut布局实践

 【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

  开始设计 布局

  首先,咱们先设计下将要设计的键盘布局图,以下图: 性能

Android 4.0之GridLayOut布局实践学习

  能够看到这个布局的一些特色: 学习

  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" />  

  ………………………

  运行后,能够看到一个初步的效果以下图所示:

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布局实践学习

  美化页面布局

  咱们能够看到在上图中,依然出现了不少空位,跟咱们预想的草稿图有必定差距,这里其实能够调整每一个数字按钮中的位置便可,能够利用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布局实践学习

相关阅读
相关文章
相关标签/搜索