当前位置: 首页 > news >正文

Android开发学习笔记:浅谈GridView

GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片等内容,比如实现九宫格图,用GridView是首选,也是最简单的。主要用于设置Adapter。
GridView常用的XML属性:
 

属性名称

描述

android:columnWidth

设置列的宽度。

android:gravity

设置此组件中的内容在组件中的位置。可选的值有:top、bottom、left、right、center_vertical、 fill_vertical、center_horizontal、fill_horizontal、center、fill、 clip_vertical可以多选,用“|”分开。

android:horizontalSpacing

两列之间的间距。

android:numColumns

设置列数。

android:stretchMode

缩放模式。

android:verticalSpacing

两行之间的间距。

 

下面有三个例子,第一个是只显示图片的,第二个是显示图片文字的(这里的图片是Android系统自带的图片),第三个是显示自定义的图片文字。前面两个 例子的实现都不是很难,第三个例子的实现有些复杂,学习GridView的时候,就想着能不能自定义自己喜欢的图片加上文字,在网上找些资料,一般都是第 二个例子的形式的,最后在视频学习上找到了能实现自定义自己的图片的例子。自己就照着例子去学习,修改成了第三个例子。
第一个例子:
MainActivity.java
package com.android.gridview.activity; 
 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.Toast; 
 
public class MainActivity extends Activity { 
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        GridView gv = (GridView)findViewById(R.id.GridView1); 
        //为GridView设置适配器 
        gv.setAdapter(new MyAdapter(this)); 
        //注册监听事件 
        gv.setOnItemClickListener(new OnItemClickListener() 
        { 
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
            { 
                Toast.makeText(MainActivity.this, "pic" + position, Toast.LENGTH_SHORT).show(); 
            } 
        }); 
    } 

    //自定义适配器 
    class MyAdapter extends BaseAdapter{ 
        //上下文对象 
        private Context context; 
        //图片数组 
        private Integer[] imgs = { 
                R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,  
                R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,                
                R.drawable.pic6, R.drawable.pic7, R.drawable.pic8,  
                R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,  
                R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,                
                R.drawable.pic6, R.drawable.pic7, R.drawable.pic8, 
        }; 
        MyAdapter(Context context){ 
            this.context = context; 
        } 
        public int getCount() { 
            return imgs.length; 
        } 
 
        public Object getItem(int item) { 
            return item; 
        } 
 
        public long getItemId(int id) { 
            return id; 
        } 
         
        //创建View方法 
        public View getView(int position, View convertView, ViewGroup parent) { 
             ImageView imageView; 
                if (convertView == null) { 
                    imageView = new ImageView(context); 
                    imageView.setLayoutParams(new GridView.LayoutParams(75, 75));//设置ImageView对象布局 
                    imageView.setAdjustViewBounds(false);//设置边界对齐 
                    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//设置刻度的类型 
                    imageView.setPadding(8, 8, 8, 8);//设置间距 
                }  
                else { 
                    imageView = (ImageView) convertView; 
                } 
                imageView.setImageResource(imgs[position]);//为ImageView设置图片资源 
                return imageView; 
        } 

     
 
 
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <GridView  
        android:id="@+id/GridView1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"
        android:columnWidth="90dp"
        android:numColumns="3"
        android:verticalSpacing="10dp"
        android:horizontalSpacing="10dp"
        android:stretchMode="columnWidth"
        android:gravity="center"         
        />
</LinearLayout>
效果图:

 
第二个例子:
MainActivity.java
package com.android.gridview2.activity; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.GridView; 
import android.widget.SimpleAdapter; 
 
public class MainActivity extends Activity { 
 
       private GridView gv; 
       @Override
       protected void onCreate(Bundle savedInstanceState) { 
          // TODO Auto-generated method stub 
          super.onCreate(savedInstanceState); 
          setContentView(R.layout.gridview); 
 
          //准备要添加的数据条目 
          List<Map<String, Object>> items = new ArrayList<Map<String,Object>>(); 
          for (int i = 0; i < 9; i++) { 
            Map<String, Object> item = new HashMap<String, Object>(); 
            item.put("imageItem", R.drawable.icon);//添加图像资源的ID   
            item.put("textItem", "icon" + i);//按序号添加ItemText   
            items.add(item); 
          } 
 
         //实例化一个适配器 
          SimpleAdapter adapter = new SimpleAdapter(this,  
                                                      items,  
                                                      R.layout.grid_item,  
                                                      new String[]{"imageItem", "textItem"},  
                                                      new int[]{R.id.image_item, R.id.text_item}); 
 
          //获得GridView实例 
          gv = (GridView)findViewById(R.id.mygridview); 
          //为GridView设置适配器 
          gv.setAdapter(adapter); 
 
       } 

 
 
gridview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   >
   <GridView  
      android:id="@+id/mygridview"
      android:numColumns="3"
      android:gravity="center_horizontal"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:stretchMode="columnWidth"
      />
</LinearLayout>
 
grid_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/RelativeLayout1"
   android:layout_width="wrap_content"  
   android:layout_height="fill_parent"
   android:paddingBottom="6dip"
   >
   <ImageView  
      android:id="@+id/image_item"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_centerHorizontal="true"
      />
   <TextView  
      android:id="@+id/text_item"
      android:layout_below="@+id/image_item"
      android:layout_height="wrap_content"
      android:layout_width="wrap_content"
      android:layout_centerHorizontal="true"    
      />
</RelativeLayout>
 
效果图:


 
第三个例子:
MainActivity.java
package com.android.gridview3; 
 
import java.util.ArrayList; 
import java.util.List; 
import android.app.Activity; 
import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.GridView; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 
 
public class MainActivity extends Activity 

    private GridView gridView; 
    //图片的文字标题 
    private String[] titles = new String[] 
    { "pic1", "pic2", "pic3", "pic4", "pic5", "pic6", "pic7", "pic8", "pic9"}; 
    //图片ID数组 
    private int[] images = new int[]{        
            R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,  
            R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,  
            R.drawable.pic7, R.drawable.pic8,R.drawable.pic9  
    }; 
 
    @Override
    public void onCreate(Bundle savedInstanceState){ 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        gridView = (GridView) findViewById(R.id.gridview); 
        PictureAdapter adapter = new PictureAdapter(titles, images, this); 
        gridView.setAdapter(adapter); 
 
        gridView.setOnItemClickListener(new OnItemClickListener() 
            { 
                public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
                { 
                    Toast.makeText(MainActivity.this, "pic" + (position+1), Toast.LENGTH_SHORT).show(); 
                } 
            }); 
    } 

//自定义适配器 
class PictureAdapter extends BaseAdapter{ 
    private LayoutInflater inflater; 
    private List<Picture> pictures; 
 
    public PictureAdapter(String[] titles, int[] images, Context context) 
    { 
        super(); 
        pictures = new ArrayList<Picture>(); 
        inflater = LayoutInflater.from(context); 
        for (int i = 0; i < images.length; i++) 
        { 
            Picture picture = new Picture(titles[i], images[i]); 
            pictures.add(picture); 
        } 
    } 
 
    @Override
    public int getCount() 
    { 
        if (null != pictures) 
        { 
            return pictures.size(); 
        } else
        { 
            return 0; 
        } 
    } 
 
    @Override
    public Object getItem(int position) 
    { 
        return pictures.get(position); 
    } 
 
    @Override
    public long getItemId(int position) 
    { 
        return position; 
    } 
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
        ViewHolder viewHolder; 
        if (convertView == null) 
        { 
            convertView = inflater.inflate(R.layout.picture_item, null); 
            viewHolder = new ViewHolder(); 
            viewHolder.title = (TextView) convertView.findViewById(R.id.title); 
            viewHolder.image = (ImageView) convertView.findViewById(R.id.image); 
            convertView.setTag(viewHolder); 
        } else
        { 
            viewHolder = (ViewHolder) convertView.getTag(); 
        } 
        viewHolder.title.setText(pictures.get(position).getTitle()); 
        viewHolder.image.setImageResource(pictures.get(position).getImageId()); 
        return convertView; 
    } 
 

 
class ViewHolder 

    public TextView title; 
    public ImageView image; 

 
class Picture 

    private String title; 
    private int imageId; 
 
    public Picture() 
    { 
        super(); 
    } 
 
    public Picture(String title, int imageId) 
    { 
        super(); 
        this.title = title; 
        this.imageId = imageId; 
    } 
 
    public String getTitle() 
    { 
        return title; 
    } 
 
    public void setTitle(String title) 
    { 
        this.title = title; 
    } 
 
    public int getImageId() 
    { 
        return imageId; 
    } 
 
    public void setImageId(int imageId) 
    { 
        this.imageId = imageId; 
    } 

main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
    />
picture_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:orientation="vertical"  
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"  
    android:layout_marginTop="5dp"
    >
    <ImageView  
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="150dp"  
        android:layout_gravity="center"
        android:scaleType="fitXY"
        android:padding="4dp"
       />
    <TextView  
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"  
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        />
</LinearLayout>
效果图:

 

转载于:https://www.cnblogs.com/xgjblog/p/4039762.html

相关文章:

  • 我从来不理解JavaScript闭包,直到有人这样向我解释它...
  • ExtJs自学教程(1):一切从API開始
  • Create React App 使用
  • 演练5-5:Contoso大学校园管理系统5
  • [USACO12DEC]逃跑的BarnRunning Away From…
  • SpiderData 2019年2月13日 DApp数据排行榜
  • css按钮渐变色
  • 如何胜任知名企业的商业数据分析师?
  • 网站优化技术
  • AI和ML自动化测试是骗人的营销手段吗?
  • C# U盘扫描
  • 工欲善其事必先利其器之8266
  • 2019年面对全新的DDoS功击企业需做好哪些防护措施?
  • GCD1:构建Block Objects
  • SQL 难点解决:记录的引用
  • 网络传输文件的问题
  • Android Volley源码解析
  • angular组件开发
  • CSS盒模型深入
  • ECMAScript入门(七)--Module语法
  • Java 网络编程(2):UDP 的使用
  • js对象的深浅拷贝
  • leetcode388. Longest Absolute File Path
  • swift基础之_对象 实例方法 对象方法。
  • Vim 折腾记
  • 记一次和乔布斯合作最难忘的经历
  • 来,膜拜下android roadmap,强大的执行力
  • 聊聊redis的数据结构的应用
  • 爬虫模拟登陆 SegmentFault
  • 少走弯路,给Java 1~5 年程序员的建议
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #define与typedef区别
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (原)本想说脏话,奈何已放下
  • (轉)JSON.stringify 语法实例讲解
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net反编译的九款神器
  • .NET建议使用的大小写命名原则
  • .NET业务框架的构建
  • [ C++ ] STL---string类的模拟实现
  • [ solr入门 ] - 利用solrJ进行检索
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [autojs]逍遥模拟器和vscode对接
  • [BUUCTF 2018]Online Tool
  • [BZOJ4010]菜肴制作
  • [C#]无法获取源 https://api.nuge t.org/v3-index存储签名信息解决方法
  • [CSS] 点击事件触发的动画
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档
  • [hdu 1247]Hat’s Words [Trie 图]
  • [Latex] Riemann 问题中的激波,接触间断,膨胀波的 Tikz 绘图
  • [LeetCode]--61. Rotate List
  • [leetcode]Symmetric Tree