GridView的一些属性:

1.android:numColumns=”auto_fit”   //GridView的列数设置为自动,也可以设置成2、3、4……

2.android:columnWidth=”90dp "       //每列的宽度,也就是Item的宽度

3.android:stretchMode=”columnWidth"//缩放与列宽大小同步

4.android:verticalSpacing=”10dp”          //两行之间的边距

5.android:horizontalSpacing=”10dp”      //两列之间的边距

6.android:cacheColorHint="#00000000" //去除拖动时默认的黑色背景

7.android:listSelector="#00000000"        //去除选中时的黄色底色

8.android:scrollbars="none"                   //隐藏GridView的滚动条

9.android:fadeScrollbars="true"             //设置为true就可以实现滚动条的自动隐藏和显示

10.android:fastScrollEnabled="true"      //GridView出现快速滚动的按钮(至少滚动4页才会显示)

11.android:fadingEdge="none"                //GridView衰落(褪去)边缘颜色为空,缺省值是vertical。(可以理解为上下边缘的提示色)

12.android:fadingEdgeLength="10dip"   //定义的衰落(褪去)边缘的长度

13.android:stackFromBottom="true"       //设置为true时,你做好的列表就会显示你列表的最下面

14.android:transcriptMode="alwaysScroll" //当你动态添加数据时,列表将自动往下滚动最新的条目可以自动滚动到可视范围内

15.android:drawSelectorOnTop="false"  //点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)

下面来示例显示程序图标与标题:

子元素布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ImageView android:id="@+id/itemImage"android:layout_width="80dp"android:layout_height="80dp"android:layout_centerHorizontal="true"/><TextView android:id="@+id/itemName"android:layout_below="@id/itemImage"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerHorizontal="true"/></RelativeLayout>

GridView布局,每列3个:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><GridViewandroid:id="@+id/gridView"android:layout_width="match_parent"android:layout_height="wrap_content"android:horizontalSpacing="2dp"android:numColumns="3"android:verticalSpacing="2dp" /></LinearLayout>

数据绑定,给定点击事件:

package com.example.androidgridview;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.R.string;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;public class MainActivity extends Activity {private GridView gridView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);gridView = (GridView) this.findViewById(R.id.gridView);List<Map<String, Object>> item = getData();// SimpleAdapter对象,匹配ArrayList中的元素SimpleAdapter simpleAdapter = new SimpleAdapter(this, item, R.layout.gridviewitem, new String[] { "itemImage", "itemName" }, new int[] { R.id.itemImage, R.id.itemName });gridView.setAdapter(simpleAdapter);// 添加点击事件gridView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {int index = arg2 + 1;// id是从0开始的,所以需要+1Toast.makeText(getApplicationContext(), "你按下了选项:" + index, 0).show();}});}/*** 将图标图片和图标名称存入ArrayList中* * @return*/private List<Map<String, Object>> getData() {List<Map<String, Object>> items = new ArrayList<Map<String, Object>>();int[] listImg = new int[] { R.drawable.browser, R.drawable.email, R.drawable.camera, R.drawable.clock, R.drawable.contacts, R.drawable.gallery, R.drawable.gmail, R.drawable.gtalk, R.drawable.maps, R.drawable.market, R.drawable.messages, R.drawable.phone, R.drawable.voice, R.drawable.music, R.drawable.calender };String[] listName = new String[] { "九宫blue", "九宫email", "九宫firfox", "九宫gongju", "九宫heguo", "九宫kaiguan", "九宫letv", "九宫libray", "九宫list", "九宫luxiang", "九宫main", "九宫ooo", "九宫twite", "九宫voda", "九宫wifi" };for (int i = 0; i < listImg.length; i++) {Map<String, Object> item = new HashMap<String, Object>();item.put("itemImage", listImg[i]);item.put("itemName", listName[i]);items.add(item);}return items;}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);return true;}}

运行效果:

图片资源下载

 运行的时候报错:

81000-byte external allocation too large for this process.

VM won't let us allocate 81000 bytes

Google后得到信息是  Android的Dalvik VM为一个应用提供了大约16MB的内存,一般我们处理超过8MB的图片将会出现OutOfMemoryError异常(内存溢出异常)

其中一个方法:http://stackoverflow.com/questions/8250704/external-allocation-too-large-for-this-process

在网上找了一下,参考网友的方法,通常的原因就是我们加载的图片太大,我看了一下我的图片,用500W像素的Defy拍的,原始大小一般都在800KB左右,这样大的图片才导致了内存泄露,网上大神们给的通常的解决方法是,用BitmapFactory解码时加上设置好的options指令(我就是没用options),通常Options如下设定:

BitmapFactory.Options options=new Options();
    options.inDither=false;    /*不进行图片抖动处理*/
    options.inPreferredConfig=null;  /*设置让解码器以最佳方式解码*/
    options.inSampleSize=4;          /*图片长宽方向缩小倍数*/
    Bitmap img=BitmapFactory.decodeByteArray(buffer, 0, buffer.length, options);

这样修改后,我发现传到手机上的图片一般都是200KB左右了,即缩小为原来的1/4,而且看起来还行,没怎么失真,几乎不影响观看效果,问题也解决了~

对了,最好在你使用完Bitmap之后,调用一下recycle()方法,这样更有利于内存回收。

我此处用到的图片都是80KB以上的,存在drawable文件夹中,直接用R.drawable.来调用,没用到Bitmap ,因此只能缩小图片大小。

Android网格视图(GridView)相关推荐

  1. Android 网格视图GridView

    GridView的视图排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要显示时,可以使用GirdView.既然有多个元素要显示,就需要使用BaseAdapter来存储这些元素.用户可能 ...

  2. 高级控件——列表类视图——网格视图GridView

    ======================================================================================= 布局: <Line ...

  3. Android -- 下拉列表、列表视图、网格视图

    下拉框 -- 文本 Spinner 用于从一串列表中选择某项,功能类似于单选按钮的组合 下拉列表的展示 方式有两种,一种是在当前下拉框的正下方弹出列表框,此时要把spinnerMode属性设置为 dr ...

  4. UI组件之AdapterView及其子类(二)GridView网格视图的使用

    GridView网格视图属性: android:numColumns="auto_fit" --------列数设置为自动,可以为确定的数值 android:columnWidth ...

  5. ASP.NET中 DropDownList+GridView(网格视图)的使用前台绑定[高]

    ylbtech-ASP.NET-Control-Bind:DropDownList+GridView(网格视图)的使用前台绑定[高] ASP.NET中 DropDownList+GridView(网格 ...

  6. Android开发之GridView的使用(解读谷歌官方API)

    GridView将图片显示在二维可移动的网格里,使用ListAdapter可以将Grid项目自动填充满整个布局.下面我们根据官方文档的例子来实现一下使用GridView,点击视图里的图片弹出图片的po ...

  7. 安卓学习笔记23:常用控件 - 网格视图与图像切换器

    文章目录 零.学习目标 一.网格视图 (一)概述 (二)继承关系图 (三)常用属性 二.图像切换器 (一)概述 (二)继承关系图 三.案例演示 - 选择水果 (一)运行效果 (二)涉及知识点 (三)实 ...

  8. 学习笔记(五)——数据适配器、数据表、数据网格视图控件的综合应用。

    学习笔记(五)--数据适配器.数据表.数据网格视图控件的综合应用. 1.  批量修改 修改包括增加,删除以及更新3个操作,所以声明实力化3个SQL命令分别应用于插入,删除以及修改 将声明的SQL命令连 ...

  9. android paopao窗口+gridview 的实现底部菜单

    PopupWindow是一个可以显示在当前Activity之上的浮动容器,PopupWindow弹出的位置是能够改变的,按照有无偏移量,可以分为无偏移和有便宜两种:按照参照对象的不同又可以分为两种:相 ...

最新文章

  1. 幸运 - 一种可以学习的简单技能
  2. java 序列化概念和作用_结合代码详细解读Java序列化与反序列化概念理解
  3. error C4335: Mac file format detected: please convert the source file to either DOS or UNIX format
  4. 使用CSS样式对表格进行美化并对伪类的使用进行解析
  5. 【往届已EI检索-IEEE技术支持】第三届-信息技术与计算机应用 多主题征稿!
  6. matlab中定点数16位转为14位,如何使用python将浮点数转换为具有预定义位数的固定点...
  7. 计算机基础与c语言试题及答案,2017年9月计算机二级C语言基础试题及答案
  8. 新版抖音二维码生成工具源码+实测可用
  9. 极光推送短信api接口
  10. 几款优秀的文档管理系统
  11. JavaMail学习6 发送邮件
  12. linux系统清理命令行,告诉你Ubuntu系统较全面清理的方法及命令
  13. axios请求跨域前端解决_10、axios请求以及跨域问题,前端解决方法。11、后端-nginx解决方法...
  14. m3u8转换到mp4 python_如何把m3u8格式转换成mp4格式?
  15. 学习笔记—Vue项目启动时卡在98% after emitting CopyPlugin的问题解决
  16. 如何做好产品经理和如何学习UI
  17. MDT2008部署杂谈2——简介
  18. 让笔记本延年-电池的保养技巧
  19. (php)泛微E-Office文件上传漏洞(原理分析+复现+批量检测)
  20. 2023年外贸行业面临的现状

热门文章

  1. java比python难_python java JAVA比python难多少?
  2. tensorflow gpu利用率为0_训练效率低?GPU利用率上不去?快来看看别人家的tricks吧...
  3. Qt学习(四):qt读写文件
  4. html文件 运行php文件路径问题,HTML_基础 HTML之目录问题(相对路径和绝对路径区别),相对路径-以引用文件之网页所 - phpStudy...
  5. css 图片换行_这个开源库教你写高级的CSS
  6. 英语语法---感叹词详解
  7. 第四范式受邀参加信息技术大讲堂 共探新基建发展趋势
  8. Tensorflow2.6更新cuda11.2
  9. rust(13)-闭包作为参数 trait泛型
  10. 【学术相关】普通在读奶爸博士生的一年总结!