zoukankan      html  css  js  c++  java
  • android布局基础及范例:人人android九宫格布局

    人人android是人人网推出的一款优秀的手机应用软件,我们在使用的时候发现他的首页布局是九宫格模式的,让人觉得很别致,因为现在很多的 android软件很少使用这种布局模式,人人android使用的很成功,使人觉得简洁大方美观,下面我们来看看人人android的布局


    其实这种布局是使用了一种叫“GridView”的表格布局,下面我来给大家讲一下:

    首先,请大家理解一下“迭代显示”这个概念,这个好比布局嵌套,我们在一个大布局里面重复的放入一些布局相同的小布局,

    那些重复的部分是由图片和文字组成的小控件,图片在上方,文字在下方,之后我们只需要把这些小控件迭代进入主容器里即可。

    我们来看看实际做出来的效果图:


     

    我们来看看主容器的布局(GridView)

    ———————————————main.xml————————————————

    01 <?xml version="1.0" encoding="utf-8"?>
    02 <GridView xmlns:android="http://schemas.android.com/apk/res/android"
    03       android:id="@+id/GridView"
    04       android:layout_width="fill_parent"
    05       android:layout_height="fill_parent"
    06       android:numColumns="auto_fit"
    07       android:columnWidth="90dp"
    08       android:stretchMode="columnWidth"
    09       android:gravity="center">
    10 </GridView>
    ——————————————————————————————————————————————————

    介绍一下里面的某些属性:

    android:numColumns=”auto_fit” ,GridView的列数设置为自动
    android:columnWidth=”90dp”,每列的宽度,也就是Item的宽度
    android:stretchMode=”columnWidth”,缩放与列宽大小同步

    在这里需要关注的属性是columnWidth,这里指定了列的宽度,一个列对象,对应一个 “可重复的子项”,这个子项就是我们 的图片项和图片下方文字显示的部分。如果不指定这个宽度的话,默认是每行(展示的行,界面)仅仅只显示一个 “可重复的子项”,而当指定了宽度时,本文指定为90dp,如果每行实际行尺寸大于90,他就会继续将下一个的“可重复的子项”,放置在本行。于是就呈现一种 一行显示多个子项的情况。numColumns属性,指定一个自动填充的值,指示了自动填充行。

    接下来我们需要再创建一个XML布局文件,这里我们写需要“被迭代”的子项(RelativeLayout)

    不熟悉RelativeLayout布局的请看我写的上一篇博客:android布局基础及范例(一)

    —————————————item.xml—————————————

    01 <?xml version="1.0" encoding="utf-8"?>
    02 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    03 android:layout_width="fill_parent"
    04 android:layout_height="wrap_content"
    05 >
    06 <ImageView
    07     android:layout_width="wrap_content"
    08     android:id="@+id/ItemImage"
    09     android:layout_height="wrap_content"
    10     android:layout_centerHorizontal="true"/>
    11 <TextView
    12     android:layout_width="wrap_content"
    13     android:layout_height="wrap_content"
    14     android:layout_below="@+id/ItemImage"
    15     android:id="@+id/ItemText"
    16     android:layout_centerHorizontal="true"
    17 />
    18 </RelativeLayout>

    这里使用了一个相对布局,在TextView 里使用属性android:layout_below=”@+id/ItemImage”指示了文本在图片的下方。

    最后一步,我们需要把这些东西拼在一起,并且实现

    这里我们采用了java中的数据结构:HashMap,用法这里不多说了,可以自行百度。

    然后构建ArrayList作为数据源,再构建SimpleAdapter 作为数据适配器,为gridView指定适配器对象。

    以下是java代码:

    —————————————layout_gridview.java————————————

    01 package jiabin.activity;
    02    
    03 import java.util.ArrayList;
    04 import java.util.HashMap;
    05    
    06 import android.app.Activity;
    07 import android.os.Bundle;
    08 import android.view.View;
    09 import android.widget.AdapterView;
    10 import android.widget.AdapterView.OnItemClickListener;
    11 import android.widget.GridView;
    12 import android.widget.SimpleAdapter;
    13 import android.widget.Toast;
    14    
    15 public class layout_gridview extends Activity {
    16     /** Called when the activity is first created. */
    17     @Override
    18     public void onCreate(Bundle savedInstanceState) {
    19         super.onCreate(savedInstanceState);
    20         setContentView(R.layout.main);
    21         GridView gridview = (GridView) findViewById(R.id.GridView);
    22         ArrayList<HashMap<String, Object>> meumList = new ArrayList<HashMap<String, Object>>();
    23         for(int i = 1;i < 10;i++)
    24         {
    25             HashMap<String, Object> map = new HashMap<String, Object>();
    26             map.put("ItemImage", R.drawable.i1);
    27             map.put("ItemText", ""+i);
    28             meumList.add(map);
    29         }
    30         SimpleAdapter saItem = new SimpleAdapter(this,
    31                   meumList, //数据源
    32                   R.layout.item, //xml实现
    33                   new String[]{"ItemImage","ItemText"}, //对应map的Key
    34                   new int[]{R.id.ItemImage,R.id.ItemText});  //对应R的Id
    35    
    36                 //添加Item到网格中
    37                 gridview.setAdapter(saItem);
    38                 //添加点击事件
    39                 gridview.setOnItemClickListener(
    40                     new OnItemClickListener()
    41                     {
    42                         public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3)
    43                         {
    44                             int index=arg2+1;//id是从0开始的,所以需要+1
    45                             Toast.makeText(getApplicationContext(), "你按下了选项:"+index, 0).show();
    46                             //Toast用于向用户显示一些帮助/提示
    47                         }
    48                     }
    49                 );
    50     }
    51 }

    点击事件响应使用Toast,我们可以用此方法显示用户点击的效果和触发动作,上面代码使用了Toast默认效果,

    我们来看看效果图:


    这种布局是不是很拉风呢,哈哈,为了更好学习代码,我会把源码下载链接放在下面,供大家下载学习

    源码下载:layout_gridview
    原文出处:http://blog.csdn.net/jiabinjlu/article/details/6921008

     
    欢迎光临小站 好岸园 http://www.hopean.com
  • 相关阅读:
    Zabbix5 Frame 嵌套
    Zabbix5 对接 SAML 协议 SSO
    CentOS7 安装 Nexus
    CentOS7 安装 SonarQube
    GitLab 后台修改用户密码
    GitLab 查看版本号
    GitLab Admin Area 500 Error
    Linux 安装 PostgreSQL
    Liger ui grid 参数
    vue.js 是一个怪东西
  • 原文地址:https://www.cnblogs.com/hopeanCom/p/2823156.html
Copyright © 2011-2022 走看看