zoukankan      html  css  js  c++  java
  • Android控件之GridView探究

    GridView是一项显示二维的viewgroup,可滚动的网格。一般用来显示多张图片。

    以下模拟九宫图的实现,当鼠标点击图片时会进行相应的跳转链接。

    目录结构

    main.xml布局文件,存放GridView控件

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <!--
    android:numColumns
    ="auto_fit" ,GridView的列数设置为自动
    android:columnWidth
    ="90dp",每列的宽度,也就是Item的宽度
    android:stretchMode
    ="columnWidth",缩放与列宽大小同步
    android:verticalSpacing
    ="10dp",两行之间的边距,如:行一(NO.0~NO.2)与行二(NO.3~NO.5)间距为10dp
    android:horizontalSpacing
    ="10dp",两列之间的边距
    -->
    <GridView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id
    ="@+id/gridview"
    android:layout_width
    ="fill_parent"
    android:layout_height
    ="fill_parent"
    android:numColumns
    ="auto_fit"
    android:verticalSpacing
    ="10dp"
    android:horizontalSpacing
    ="10dp"
    android:columnWidth
    ="90dp"
    android:stretchMode
    ="columnWidth"
    android:gravity
    ="center"
    />
    复制代码

    night_item.xml布局文件,存放显示控件

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android
    ="http://schemas.android.com/apk/res/android"
    android:layout_height
    ="wrap_content"
    android:paddingBottom
    ="4dip"
    android:layout_width
    ="fill_parent">
    <ImageView android:layout_height="wrap_content"
    android:layout_width
    ="wrap_content"
    android:layout_centerHorizontal
    ="true"
    android:id
    ="@+id/itemImage">
    </ImageView>
    <TextView android:layout_width="wrap_content"
    android:layout_below
    ="@+id/itemImage"
    android:layout_height
    ="wrap_content"
    android:text
    ="TextView01"
    android:layout_centerHorizontal
    ="true"
    android:id
    ="@+id/itemText">
    </TextView>
    </RelativeLayout>
    复制代码

    strings.xml

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <string name="hello">Hello World, GvActivity!</string>
    <string name="app_name">九宫图</string>
    <string name="test_name1">跳转到TestActivity1</string>
    <string name="test_name2">跳转到TestActivity2</string>
    <string name="test_name3">跳转到TestActivity3</string>
    </resources>
    复制代码

    清单文件

    复制代码
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ljq.gv"
    android:versionCode
    ="1"
    android:versionName
    ="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".GvActivity"
    android:label
    ="@string/app_name">
    <intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
    </activity>
    <activity android:name=".TestActivity1" android:label="@string/test_name1"/>
    <activity android:name=".TestActivity2" android:label="@string/test_name2"/>
    <activity android:name=".TestActivity3" android:label="@string/test_name3"/>
    </application>
    <uses-sdk android:minSdkVersion="7"/>

    </manifest>
    复制代码

    跳转类TestActivity1、TestActivity2、TestActivity3

    复制代码
    package com.ljq.gv;

    import android.app.Activity;
    import android.os.Bundle;

    publicclass TestActivity1 extends Activity {

    @Override
    publicvoid onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);
    }
    }

    package com.ljq.gv;

    import android.app.Activity;
    import android.os.Bundle;

    publicclass TestActivity2 extends Activity {

    @Override
    publicvoid onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);
    }
    }

    package com.ljq.gv;

    import android.app.Activity;
    import android.os.Bundle;

    publicclass TestActivity3 extends Activity {

    @Override
    publicvoid onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.main);
    }
    }
    复制代码

    类GvActivity

    复制代码
    package com.ljq.gv;

    import java.util.ArrayList;
    import java.util.HashMap;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.GridView;
    import android.widget.SimpleAdapter;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;

    publicclass GvActivity extends Activity {
    private String texts[] =null;
    privateint images[] =null;

    publicvoid onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    images
    =newint[]{R.drawable.p1, R.drawable.p2,
    R.drawable.p3, R.drawable.p4,
    R.drawable.p5,R.drawable.p6,
    R.drawable.p7,R.drawable.p8};
    texts
    =new String[]{ "宫式布局1", "宫式布局2",
    "宫式布局3", "宫式布局4",
    "宫式布局5", "宫式布局6",
    "宫式布局7", "宫式布局8"};

    GridView gridview
    = (GridView) findViewById(R.id.gridview);
    ArrayList
    <HashMap<String, Object>> lstImageItem =new ArrayList<HashMap<String, Object>>();
    for (int i =0; i <8; i++) {
    HashMap
    <String, Object> map =new HashMap<String, Object>();
    map.put(
    "itemImage", images[i]);
    map.put(
    "itemText", texts[i]);
    lstImageItem.add(map);
    }

    SimpleAdapter saImageItems
    =new SimpleAdapter(this,
    lstImageItem,
    // 数据源
    R.layout.night_item,// 显示布局
    new String[] { "itemImage", "itemText" },
    newint[] { R.id.itemImage, R.id.itemText });
    gridview.setAdapter(saImageItems);
    gridview.setOnItemClickListener(
    new ItemClickListener());
    }

    class ItemClickListener implements OnItemClickListener {
    /**
    * 点击项时触发事件
    *
    *
    @param parent 发生点击动作的AdapterView
    *
    @param view 在AdapterView中被点击的视图(它是由adapter提供的一个视图)。
    *
    @param position 视图在adapter中的位置。
    *
    @param rowid 被点击元素的行id。
    */
    publicvoid onItemClick(AdapterView<?> parent, View view, int position, long rowid) {
    HashMap
    <String, Object> item = (HashMap<String, Object>) parent.getItemAtPosition(position);
    //获取数据源的属性值
    String itemText=(String)item.get("itemText");
    Object object
    =item.get("itemImage");
    Toast.makeText(GvActivity.
    this, itemText, Toast.LENGTH_LONG).show();

    //根据图片进行相应的跳转
    switch (images[position]) {
    case R.drawable.p1:
    startActivity(
    new Intent(GvActivity.this, TestActivity1.class));//启动另一个Activity
    finish();//结束此Activity,可回收
    break;
    case R.drawable.p2:
    startActivity(
    new Intent(GvActivity.this, TestActivity2.class));
    finish();
    break;
    case R.drawable.p3:
    startActivity(
    new Intent(GvActivity.this, TestActivity3.class));
    finish();
    break;
    }

    }
    }
    }
    复制代码

    运行结果

  • 相关阅读:
    [原][诗]送幼儿园杨老师
    [原]由智能音箱被黑联想到。。。人类灭亡
    [转]VS中的路径宏 OutDir、ProjectDir、SolutionDir各种路径含义
    [原]globalmapper设置高程配色(globalmapper自定义配色方案)
    [原]JSON 字符串(值)做判断,比较 “string ”
    [转]使用 curl 发送 POST 请求的几种方式
    [转]c++多线程编程之pthread线程深入理解
    [转]c++ pthread 多线程简介
    Linux下ps -ef和ps aux的区别
    Java三种方式实现栈和队列
  • 原文地址:https://www.cnblogs.com/shanmao/p/3526561.html
Copyright © 2011-2022 走看看