Android GridView属性

来源:互联网 发布:mediainfo for mac 编辑:程序博客网 时间:2024/06/09 17:38

一Android GridView属性

android:numColumns=”auto_fit”      GridView的列数设置为自动

android:columnWidth=”90dp "  每列的宽度,也就是Item的宽度
android:stretchMode=”columnWidth"    缩放与列宽大小同步
android:verticalSpacing=”10dp”   两行之间的边距

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

android:listSelector="#FFF0F5" 点击的时候与父元素颜色同步



GridView组件详细文档 

一、结构

 

 

    public final class GridView extends AbsListView

 

    java.lang.Object 
      ↳ android.view.View 
        ↳ android.view.ViewGroup 
          ↳ android.widget.AdapterView<T extends android.widget.Adapter> 
            ↳ android.widget.AbsListView 
              ↳ android.widget.GridView

 

 

  二、类概述

    一个在平面上可显示多个条目的可滚动的视图组件,该组件中的条目通过一个ListAdapter和该组件进行关联。比如android手机中显示的应用:

    

    比如实现九宫格图,用GridView是首选,也是最简单的。

 

  三、构造函数

    public GridView (Context context) 
    创建一个默认属性的GridView实例

    public GridView (Context context, AttributeSet attrs)

    创建一个带有attrs属性的GridView实例

    public GridView (Context context, AttributeSet attrs, int defStyle)

    创建一个带有attrs属性,并且指定其默认样式的GridView实例

 

  四、XML属性

属性名称

描述

android:columnWidth

设置列的宽度。关联的方法为:setColumnWidth(int)

android:gravity

设置此组件中的内容在组件中的位置。可选的值有:topbottomleftrightcenter_verticalfill_verticalcenter_horizontalfill_horizontalcenterfillclip_vertical可以多选,用“|”分开。关联方法:setGravity (int gravity)

android:horizontalSpacing

两列之间的间距。关联方法:setHorizontalSpacing(int)

android:numColumns

列数。关联方法:setNumColumns(int)

android:stretchMode

缩放模式。关联方法:setStretchMode(int)

android:verticalSpacing

两行之间的间距。关联方法:setVerticalSpacing(int)

 

  五、公共方法

 

         public ListAdapter getAdapter ()

   获得与此组件相关的适配器..

返回值

    ListAdapter适配器实例

        

         public int getStretchMode ()

  获得GridView的缩放模式..

 

         public boolean onKeyDown (int keyCode, KeyEvent event)

  默认由KeyEvent.Callback.onKeyMultiple()实现,如果视图是可用的并且是可点击的,那么传入 KEYCODE_DPAD_CENTERKEYCODE_ENTER值是执行的是按下视图操作。

       参数

              keyCode 一个表示按下操作的键值.

event 表示按钮事件的对象

                  返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false

 

         public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)

   默认由KeyEvent.Callback.onKeyMultiple()实现,总是返回false(不处理此事件)。

         参数

                   keyCode 键值.

repeatCount 该动作发生的次数.

event 事件对象

                  返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false

 

         public boolean onKeyUp (int keyCode, KeyEvent event)

   默认由KeyEvent.Callback.onKeyMultiple()实现,如果视图是可用的并且是可点击的,那么传入KEYCODE_DPAD_CENTERKEYCODE_ENTER值是执行的是点击视图操作。

参数

              keyCode 键值.

event 事件对象.

                  返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false

 

         public void setAdapter (ListAdapter adapter)

   设置GridView的数据。

                  参数

                            adapter grid提供数据的适配器 

 

         public void setColumnWidth (int columnWidth)

   设置GridView的列宽.

                  参数

                            columnWidth 列的宽度,以像素为单位

 

         public void setGravity (int gravity)

   设置控件内容的位置,默认值为:Gravity.LEFT.

                  参数

                            gravity 位置值

 

         public void setHorizontalSpacing (int horizontalSpacing)

   设置列间距.

                  参数

                            horizontalSpacing 列间距值

 

public void setNumColumns (int numColumns)

        设置grid的列数

 

参数

numColumns 列数值.

 

public void setSelection (int position)

        设置选中的条目.

 

参数

position . 数据条目在列表中的索引值(从0开始),如果在可触摸的模式下,在该索引值下的条目将不会被选中,但是该索引值仍然指向该条目。

 

public void setStretchMode (int stretchMode)

设置grid中的条目以什么缩放模式去填充空间。.

 

参数

stretchMode 可选值:NO_STRETCHSTRETCH_SPACINGSTRETCH_SPACING_UNIFORM,或STRETCH_COLUMN_WIDTH

 

public void setVerticalSpacing (int verticalSpacing)

设置行间距.

   参数

      verticalSpacing 间距值,以像素为单位 

 

 

  六、代码示例

    下面给出一个小例子先看效果:

    

a).GridView01.java

[java] view plaincopy
  1. public class GridView01 extends Activity {  
  2.     private GridView gridview;  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         // TODO Auto-generated method stub  
  6.         super.onCreate(savedInstanceState);  
  7.         setContentView(R.layout.gridview);  
  8.           
  9. //准备要添加的数据条目  
  10.         List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();  
  11.         for (int i = 0; i < 10; i++) {  
  12.             Map<String, Object> item = new HashMap<String, Object>();  
  13.             item.put("imageItem", R.drawable.icon);  
  14.             item.put("textItem""text" + i);  
  15.             items.add(item);  
  16.         }  
  17. //实例化一个适配器  
  18.         SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.grid_item, new String[]{"imageItem""textItem"}, new int[]{R.id.image_item, R.id.text_item});  
  19.         //获得GridView实例  
  20.         gridview = (GridView)findViewById(R.id.mygridview);  
  21.         //gridview.setNumColumns(3);//可以在xml中设置  
  22.         //gridview.setGravity(Gravity.CENTER);//同上  
  23. //将GridView和数据适配器关联  
  24.         gridview.setAdapter(adapter);  
  25.     }  
  26. }  

b).gridview.xml

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content">  
  5.     <GridView android:id="@+id/mygridview"  
  6.         android:numColumns="3"  
  7.         android:gravity="center_horizontal"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content">  
  10.     </GridView>  
  11. </LinearLayout>  

c).grid_item.xml

[xhtml] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout android:id="@+id/RelativeLayout01"  
  3.     android:layout_width="fill_parent" android:layout_height="fill_parent"  
  4.     xmlns:android="http://schemas.android.com/apk/res/android">  
  5.     <ImageView android:id="@+id/image_item"  
  6.         android:layout_width="wrap_content"  
  7.         android:layout_height="wrap_content">  
  8.     </ImageView>  
  9.     <TextView android:id="@+id/text_item"  
  10.         android:layout_below="@+id/image_item"  
  11.         android:layout_height="wrap_content"  
  12.         android:layout_width="wrap_content">  
  13.     </TextView>  
  14. </RelativeLayout>  

转载:http://www.cnblogs.com/over140/archive/2010/10/19/1855366.html

  Android API 中文 (15) —— GridView


正文

  一、结构

 

    public final classGridView extends AbsListView

 

    java.lang.Object
      android.view.View
        android.view.ViewGroup
          android.widget.AdapterView<T extends android.widget.Adapter>
            android.widget.AbsListView
              android.widget.GridView

 

  二、类概述

    一个在平面上可显示多个条目的可滚动的视图组件,该组件中的条目通过一个ListAdapter和该组件进行关联。比如android手机中显示的应用:

    

    比如实现九宫格图,用GridView是首选,也是最简单的。

 

  三、构造函数

    public GridView (Context context)
    创建一个默认属性的GridView实例

    public GridView (Context context, AttributeSet attrs)

    创建一个带有attrs属性的GridView实例

    public GridView (Context context, AttributeSet attrs, int defStyle)

    创建一个带有attrs属性,并且指定其默认样式的GridView实例

 

  四、XML属性

属性名称

描述

android:columnWidth

设置列的宽度。关联的方法为:setColumnWidth(int)

android:gravity

设置此组件中的内容在组件中的位置。可选的值有:topbottomleftrightcenter_verticalfill_verticalcenter_horizontalfill_horizontalcenterfillclip_vertical可以多选,用“|”分开。关联方法:setGravity (int gravity)

android:horizontalSpacing

两列之间的间距。关联方法:setHorizontalSpacing(int)

android:numColumns

列数。关联方法:setNumColumns(int)

android:stretchMode

缩放模式。关联方法:setStretchMode(int)

android:verticalSpacing

两行之间的间距。关联方法:setVerticalSpacing(int)

 

  五、公共方法

 

         public ListAdapter getAdapter ()

   获得与此组件相关的适配器..

返回值

    ListAdapter适配器实例

        

         public int getStretchMode ()

  获得GridView的缩放模式..

 

         public boolean onKeyDown (int keyCode, KeyEvent event)

  默认由KeyEvent.Callback.onKeyMultiple()实现,如果视图是可用的并且是可点击的,那么传入 KEYCODE_DPAD_CENTERKEYCODE_ENTER值是执行的是按下视图操作。

      参数

              keyCode 一个表示按下操作的键值.

event 表示按钮事件的对象

                  返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false

 

         public boolean onKeyMultiple (int keyCode, int repeatCount, KeyEvent event)

   默认由KeyEvent.Callback.onKeyMultiple()实现,总是返回false(不处理此事件)。

         参数

                   keyCode 键值.

repeatCount 该动作发生的次数.

event 事件对象

                  返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false

 

         public boolean onKeyUp (int keyCode, KeyEvent event)

   默认由KeyEvent.Callback.onKeyMultiple()实现,如果视图是可用的并且是可点击的,那么传入KEYCODE_DPAD_CENTERKEYCODE_ENTER值是执行的是点击视图操作。

参数

              keyCode 键值.

event 事件对象.

                  返回值

如果你认为已经完成事件处理,不想让让下一个处理器来处理此事件,则返回true,否则返回false

 

         public void setAdapter (ListAdapter adapter)

   设置GridView的数据。

                  参数

                            adapter grid提供数据的适配器 

 

         public void setColumnWidth (int columnWidth)

   设置GridView的列宽.

                  参数

                            columnWidth 列的宽度,以像素为单位

 

         public void setGravity (int gravity)

   设置控件内容的位置,默认值为:Gravity.LEFT.

                  参数

                            gravity 位置值

 

         public void setHorizontalSpacing (int horizontalSpacing)

   设置列间距.

                  参数

                            horizontalSpacing 列间距值

 

public void setNumColumns (int numColumns)

        设置grid的列数

 

参数

numColumns 列数值.

 

public void setSelection (int position)

        设置选中的条目.

 

参数

position . 数据条目在列表中的索引值(从0开始),如果在可触摸的模式下,在该索引值下的条目将不会被选中,但是该索引值仍然指向该条目。

 

public void setStretchMode (int stretchMode)

设置grid中的条目以什么缩放模式去填充空间。.

 

参数

stretchMode 可选值:NO_STRETCHSTRETCH_SPACINGSTRETCH_SPACING_UNIFORM,或STRETCH_COLUMN_WIDTH

 

public void setVerticalSpacing (int verticalSpacing)

设置行间距.

   参数

      verticalSpacing 间距值,以像素为单位 

 

 

  六、代码示例

    下面给出一个小例子先看效果:

    

    a).  GridView01.java

public class GridView01 extends Activity {
    
private GridView gridview;
    @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 < 10; i++) {
            Map
<String, Object> item = new HashMap<String, Object>();
            item.put(
"imageItem", R.drawable.icon);
            item.put(
"textItem""text" + i);
            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实例
        gridview = (GridView)findViewById(R.id.mygridview);
        
//gridview.setNumColumns(3);//可以在xml中设置
        
//gridview.setGravity(Gravity.CENTER);//同上
//将GridView和数据适配器关联
        gridview.setAdapter(adapter);
    }
}

 

    b).  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">
    
</GridView>
</LinearLayout>

    c).  grid_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    android:id="@+id/RelativeLayout01"
    android:layout_width
="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android
="http://schemas.android.com/apk/res/android">
    
<ImageView 
        android:id="@+id/image_item"
        android:layout_width
="wrap_content"
        android:layout_height
="wrap_content">
    
</ImageView>
    
<TextView 
        android:id="@+id/text_item"
        android:layout_below
="@+id/image_item"
        android:layout_height
="wrap_content"
        android:layout_width
="wrap_content">
    
</TextView>
</RelativeLayout>

Android开发学习笔记:Gallery和GridView浅析


一.Gallery的简介

    Gallery(画廊)是一个锁定中心条目并且拥有水平滚动列表的视图,一般用来浏览图片,并且可以响应事件显示信息。Gallery还可以和ImageSwitcher组件结合使用来实现一个通过缩略图来浏览图片的效果。

Gallery常用的XML属性

属性名称

描述

android:animationDuration

设置布局变化时动画的转换所需的时间(毫秒级)。仅在动画开始时计时。该值必须是整数,比如:100。

android:gravity

指定在对象的X和Y轴上如何放置内容。指定一下常量中的一个或多个(使用 “|”分割)

Constant

Value

Description

top

0x30

紧靠容器顶端,不改变其大小

bottom

0x50

紧靠容器底部,不改变其大小

left

0x03

紧靠容器左侧,不改变其大小

right

0x05

紧靠容器右侧,不改变其大小

center_vertical

0x10

垂直居中,不改变其大小

fill_vertical

0x70

垂直方向上拉伸至充满容器

center_horizontal

0x01

水平居中,不改变其大小

Fill_horizontal

0x07

水平方向上拉伸使其充满容器

center

0x11

居中对齐,不改变其大小

fill

0x77

在水平和垂直方向上拉伸,使其充满容器

clip_vertical

0x80

垂直剪切(当对象边缘超出容器的时候,将上下边缘超出的部分剪切掉)

clip_horizontal

0x08

水平剪切(当对象边缘超出容器的时候,将左右边缘超出的部分剪切掉)

android:spacing

图片之间的间距

android:unselectedAlpha

设置未选中的条目的透明度(Alpha)。该值必须是float类型,比如:“1.2”。

首先介绍Gallery单独使用的例子:

MainActivity.java

  1. package com.android.gallerydemo;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.widget.AdapterView;  
  9. import android.widget.AdapterView.OnItemClickListener;  
  10. import android.widget.BaseAdapter;  
  11. import android.widget.Gallery;  
  12. import android.widget.ImageView;  
  13. import android.widget.Toast;  
  14.  
  15. public class MainActivity extends Activity {  
  16.  
  17.    private Gallery gallery;  
  18.     @Override 
  19.     public void onCreate(Bundle savedInstanceState) {  
  20.  
  21.         super.onCreate(savedInstanceState);  
  22.         setContentView(R.layout.main);  
  23.         gallery = (Gallery)findViewById(R.id.gallery);  
  24.         //设置图片适配器  
  25.         gallery.setAdapter(new ImageAdapter(this));  
  26.         //设置监听器  
  27.         gallery.setOnItemClickListener(new OnItemClickListener() {  
  28.          @Override 
  29.          public void onItemClick(AdapterView<?>parent, View v, int position, long id) {  
  30.             Toast.makeText(MainActivity.this, "点击了第"+(position+1)+"张图片", Toast.LENGTH_LONG).show();  
  31.          }  
  32.      });  
  33.     }  
  34. }  
  35.  
  36. class ImageAdapter extends BaseAdapter{  
  37.   //声明Context   
  38.   private Context context;  
  39.   //图片源数组  
  40.   private Integer[] imageInteger={  
  41.          R.drawable.pic1,  
  42.          R.drawable.pic2,  
  43.          R.drawable.pic3,  
  44.          R.drawable.pic4,  
  45.          R.drawable.pic5,  
  46.          R.drawable.pic6,  
  47.          R.drawable.pic7  
  48.   };  
  49.     
  50.   //声明 ImageAdapter  
  51.   public ImageAdapter(Context c){  
  52.      context = c;  
  53.   }  
  54.  
  55.   @Override 
  56.   //获取图片的个数  
  57.   public int getCount() {  
  58.      return imageInteger.length;  
  59.   }  
  60.  
  61.   @Override 
  62.   //获取图片在库中的位置  
  63.   public Object getItem(int position) {  
  64.  
  65.      return position;  
  66.   }  
  67.  
  68.   @Override 
  69.   //获取图片在库中的位置  
  70.   public long getItemId(int position) {  
  71.      // TODO Auto-generated method stub  
  72.      return position;  
  73.  }  
  74.  
  75.   @Override 
  76.   public View getView(int position, View convertView, ViewGroup parent) {  
  77.  
  78.      ImageView imageView = new ImageView(context);  
  79.      //给ImageView设置资源  
  80.      imageView.setImageResource(imageInteger[position]);  
  81.      //设置比例类型  
  82.      imageView.setScaleType(ImageView.ScaleType.FIT_XY);  
  83.      //设置布局 图片128x192显示  
  84.      imageView.setLayoutParams(new Gallery.LayoutParams(128, 192));  
  85.      return imageView;  
  86.   }  
  87. }  
  88.  
  89.  

main.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <Gallery xmlns:android="http://schemas.android.com/apk/res/android"   
  3.       android:id="@+id/gallery"         
  4.       android:layout_width="fill_parent" 
  5.       android:layout_height="wrap_content" 
  6.       android:gravity="center_vertical" 
  7.       android:background="?android:galleryItemBackground" 
  8. /> 
  9.  

效果图:

 Gallery和ImageSwitcher组件结合使用的例子:

MainActivity.java

  1. package com.android.gallerytest;  
  2.  
  3. import android.app.Activity;  
  4. import android.content.Context;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8. import android.view.Window;  
  9. import android.view.animation.AnimationUtils;  
  10. import android.widget.AdapterView;  
  11. import android.widget.BaseAdapter;  
  12. import android.widget.Gallery;  
  13. import android.widget.ImageSwitcher;  
  14. import android.widget.ImageView;  
  15. import android.widget.AdapterView.OnItemSelectedListener;  
  16. import android.widget.Gallery.LayoutParams;  
  17. import android.widget.ViewSwitcher.ViewFactory;  
  18.  
  19. public class MainActivity extends Activity implements OnItemSelectedListener,  
  20.         ViewFactory {  
  21.       
  22.     private ImageSwitcher mSwitcher;  
  23.     //大图片对应的缩略图源数组  
  24.     private Integer[] mThumbIds = { R.drawable.sample_thumb_0,  
  25.             R.drawable.sample_thumb_1, R.drawable.sample_thumb_2,  
  26.             R.drawable.sample_thumb_3, R.drawable.sample_thumb_4,  
  27.             R.drawable.sample_thumb_5, R.drawable.sample_thumb_6,  
  28.             R.drawable.sample_thumb_7 };  
  29.     //大图片源数组  
  30.     private Integer[] mImageIds = { R.drawable.sample_0, R.drawable.sample_1,  
  31.             R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,  
  32.             R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };  
  33.  
  34.     @Override 
  35.     public void onCreate(Bundle savedInstanceState) {  
  36.         super.onCreate(savedInstanceState);  
  37.         //设置窗口无标题  
  38.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  39.         setContentView(R.layout.main);  
  40.         mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);  
  41.         //注意在使用一个ImageSwitcher之前,  
  42.         //一定要调用setFactory方法,要不setImageResource这个方法会报空指针异常。  
  43.         mSwitcher.setFactory(this);  
  44.         //设置动画效果  
  45.         mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,  
  46.                 android.R.anim.fade_in));  
  47.         mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,  
  48.                 android.R.anim.fade_out));  
  49.  
  50.         Gallery g = (Gallery) findViewById(R.id.gallery);  
  51.           
  52.         //添加OnItemSelectedListener监听器  
  53.         g.setAdapter(new ImageAdapter(this));  
  54.         g.setOnItemSelectedListener(this);  
  55.  
  56.     }  
  57.     //创建内部类ImageAdapter  
  58.     public class ImageAdapter extends BaseAdapter {  
  59.         public ImageAdapter(Context c) {  
  60.             mContext = c;  
  61.         }  
  62.         public int getCount() {  
  63.             return mThumbIds.length;  
  64.         }  
  65.         public Object getItem(int position) {  
  66.             return position;  
  67.         }  
  68.         public long getItemId(int position) {  
  69.             return position;  
  70.         }  
  71.         public View getView(int position, View convertView, ViewGroup parent) {  
  72.             ImageView i = new ImageView(mContext);  
  73.  
  74.             i.setImageResource(mThumbIds[position]);  
  75.             //设置边界对齐  
  76.             i.setAdjustViewBounds(true);  
  77.             //设置布局参数  
  78.             i.setLayoutParams(new Gallery.LayoutParams(  
  79.                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));  
  80.             //设置背景资源  
  81.             i.setBackgroundResource(R.drawable.picture_frame);  
  82.             return i;  
  83.         }  
  84.         private Context mContext;  
  85.     }  
  86.  
  87.     @Override 
  88.     //实现onItemSelected()方法,更换图片  
  89.     public void onItemSelected(AdapterView<?> adapter, View v, int position,  
  90.             long id) {  
  91.         //设置图片资源  
  92.         mSwitcher.setImageResource(mImageIds[position]);  
  93.     }  
  94.  
  95.     @Override 
  96.     public void onNothingSelected(AdapterView<?> arg0) {  
  97.  
  98.     }  
  99.  
  100.     @Override 
  101.     //实现makeView()方法,为ImageView设置布局格式  
  102.     public View makeView() {  
  103.         ImageView i = new ImageView(this);  
  104.         //设置背景颜色  
  105.         i.setBackgroundColor(0xFF000000);  
  106.         //设置比例类型  
  107.         i.setScaleType(ImageView.ScaleType.FIT_CENTER);  
  108.         //设置布局参数  
  109.         i.setLayoutParams(new ImageSwitcher.LayoutParams(  
  110.                 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
  111.         return i;  
  112.     }  

 main.xml

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   
  3.     android:layout_width="fill_parent"   
  4.     android:layout_height="fill_parent" 
  5.     >      
  6.     <ImageSwitcher   
  7.         android:id="@+id/switcher" 
  8.         android:layout_width="fill_parent" 
  9.         android:layout_height="fill_parent" 
  10.         android:layout_alignParentTop="true" 
  11.         android:layout_alignParentLeft="true" 
  12.         />     
  13.     <Gallery 
  14.         android:id="@+id/gallery" 
  15.         android:background="#55000000" 
  16.         android:layout_width="fill_parent" 
  17.         android:layout_height="60dp" 
  18.         android:layout_alignParentBottom="true" 
  19.         android:layout_alignParentLeft="true" 
  20.         android:gravity="center_vertical" 
  21.         android:spacing="16dp" 
  22.         /> 
  23. </RelativeLayout> 
  24.      

效果图:

 二.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

  1. package com.android.gridview.activity;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.ViewGroup;
  7. import android.widget.AdapterView;
  8. import android.widget.AdapterView.OnItemClickListener;
  9. import android.widget.BaseAdapter;
  10. import android.widget.GridView;
  11. import android.widget.ImageView;
  12. import android.widget.Toast;
  13. public class MainActivity extends Activity {
  14. @Override
  15. public void onCreate(Bundle savedInstanceState) {
  16. super.onCreate(savedInstanceState);
  17. setContentView(R.layout.main);
  18. GridView gv = (GridView)findViewById(R.id.GridView1);
  19. //为GridView设置适配器
  20. gv.setAdapter(new MyAdapter(this));
  21. //注册监听事件
  22. gv.setOnItemClickListener(new OnItemClickListener()
  23. {
  24. public void onItemClick(AdapterView<?> parent, View v, int position, long id)
  25. {
  26. Toast.makeText(MainActivity.this, "pic" + position, Toast.LENGTH_SHORT).show();
  27. }
  28. });
  29. }
  30. }
  31. //自定义适配器
  32. class MyAdapter extends BaseAdapter{
  33. //上下文对象
  34. private Context context;
  35. //图片数组
  36. private Integer[] imgs = {
  37. R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,
  38. R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
  39. R.drawable.pic6, R.drawable.pic7, R.drawable.pic8,
  40. R.drawable.pic0, R.drawable.pic1, R.drawable.pic2,
  41. R.drawable.pic3, R.drawable.pic4, R.drawable.pic5,
  42. R.drawable.pic6, R.drawable.pic7, R.drawable.pic8,
  43. };
  44. MyAdapter(Context context){
  45. this.context = context;
  46. }
  47. public int getCount() {
  48. return imgs.length;
  49. }
  50. public Object getItem(int item) {
  51. return item;
  52. }
  53. public long getItemId(int id) {
  54. return id;
  55. }
  56. //创建View方法
  57. public View getView(int position, View convertView, ViewGroup parent) {
  58. ImageView imageView;
  59. if (convertView == null) {
  60. imageView = new ImageView(context);
  61. imageView.setLayoutParams(new GridView.LayoutParams(75, 75));//设置ImageView对象布局
  62. imageView.setAdjustViewBounds(false);//设置边界对齐
  63. imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);//设置刻度的类型
  64. imageView.setPadding(8, 8, 8, 8);//设置间距
  65. }
  66. else {
  67. imageView = (ImageView) convertView;
  68. }
  69. imageView.setImageResource(imgs[position]);//为ImageView设置图片资源
  70. return imageView;
  71. }
  72. }

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <GridView
  8. android:id="@+id/GridView1"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:columnWidth="90dp"
  12. android:numColumns="3"
  13. android:verticalSpacing="10dp"
  14. android:horizontalSpacing="10dp"
  15. android:stretchMode="columnWidth"
  16. android:gravity="center"
  17. />
  18. </LinearLayout>

效果图:

 

第二个例子:

MainActivity.java

  1. package com.android.gridview2.activity;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.widget.GridView;
  9. import android.widget.SimpleAdapter;
  10. public class MainActivity extends Activity {
  11. private GridView gv;
  12. @Override
  13. protected void onCreate(Bundle savedInstanceState) {
  14. // TODO Auto-generated method stub
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.gridview);
  17. //准备要添加的数据条目
  18. List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();
  19. for (int i = 0; i < 9; i++) {
  20. Map<String, Object> item = new HashMap<String, Object>();
  21. item.put("imageItem", R.drawable.icon);//添加图像资源的ID
  22. item.put("textItem", "icon" + i);//按序号添加ItemText
  23. items.add(item);
  24. }
  25. //实例化一个适配器
  26. SimpleAdapter adapter = new SimpleAdapter(this,
  27. items,
  28. R.layout.grid_item,
  29. new String[]{"imageItem", "textItem"},
  30. new int[]{R.id.image_item, R.id.text_item});
  31. //获得GridView实例
  32. gv = (GridView)findViewById(R.id.mygridview);
  33. //为GridView设置适配器
  34. gv.setAdapter(adapter);
  35. }
  36. }

gridview.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. >
  6. <GridView
  7. android:id="@+id/mygridview"
  8. android:numColumns="3"
  9. android:gravity="center_horizontal"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:stretchMode="columnWidth"
  13. />
  14. </LinearLayout>

grid_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/RelativeLayout1"
  4. android:layout_width="wrap_content"
  5. android:layout_height="fill_parent"
  6. android:paddingBottom="6dip"
  7. >
  8. <ImageView
  9. android:id="@+id/image_item"
  10. android:layout_width="wrap_content"
  11. android:layout_height="wrap_content"
  12. android:layout_centerHorizontal="true"
  13. />
  14. <TextView
  15. android:id="@+id/text_item"
  16. android:layout_below="@+id/image_item"
  17. android:layout_height="wrap_content"
  18. android:layout_width="wrap_content"
  19. android:layout_centerHorizontal="true"
  20. />
  21. </RelativeLayout>

效果图:

 

第三个例子:

MainActivity.java

  1. package com.android.gridview3;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import android.app.Activity;
  5. import android.content.Context;
  6. import android.os.Bundle;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.AdapterView;
  11. import android.widget.BaseAdapter;
  12. import android.widget.GridView;
  13. import android.widget.ImageView;
  14. import android.widget.TextView;
  15. import android.widget.Toast;
  16. import android.widget.AdapterView.OnItemClickListener;
  17. public class MainActivity extends Activity
  18. {
  19. private GridView gridView;
  20. //图片的文字标题
  21. private String[] titles = new String[]
  22. { "pic1", "pic2", "pic3", "pic4", "pic5", "pic6", "pic7", "pic8", "pic9"};
  23. //图片ID数组
  24. private int[] images = new int[]{
  25. R.drawable.pic1, R.drawable.pic2, R.drawable.pic3,
  26. R.drawable.pic4, R.drawable.pic5, R.drawable.pic6,
  27. R.drawable.pic7, R.drawable.pic8,R.drawable.pic9
  28. };
  29. @Override
  30. public void onCreate(Bundle savedInstanceState){
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.main);
  33. gridView = (GridView) findViewById(R.id.gridview);
  34. PictureAdapter adapter = new PictureAdapter(titles, images, this);
  35. gridView.setAdapter(adapter);
  36. gridView.setOnItemClickListener(new OnItemClickListener()
  37. {
  38. public void onItemClick(AdapterView<?> parent, View v, int position, long id)
  39. {
  40. Toast.makeText(MainActivity.this, "pic" + (position+1), Toast.LENGTH_SHORT).show();
  41. }
  42. });
  43. }
  44. }
  45. //自定义适配器
  46. class PictureAdapter extends BaseAdapter{
  47. private LayoutInflater inflater;
  48. private List<Picture> pictures;
  49. public PictureAdapter(String[] titles, int[] images, Context context)
  50. {
  51. super();
  52. pictures = new ArrayList<Picture>();
  53. inflater = LayoutInflater.from(context);
  54. for (int i = 0; i < images.length; i++)
  55. {
  56. Picture picture = new Picture(titles[i], images[i]);
  57. pictures.add(picture);
  58. }
  59. }
  60. @Override
  61. public int getCount()
  62. {
  63. if (null != pictures)
  64. {
  65. return pictures.size();
  66. } else
  67. {
  68. return 0;
  69. }
  70. }
  71. @Override
  72. public Object getItem(int position)
  73. {
  74. return pictures.get(position);
  75. }
  76. @Override
  77. public long getItemId(int position)
  78. {
  79. return position;
  80. }
  81. @Override
  82. public View getView(int position, View convertView, ViewGroup parent)
  83. {
  84. ViewHolder viewHolder;
  85. if (convertView == null)
  86. {
  87. convertView = inflater.inflate(R.layout.picture_item, null);
  88. viewHolder = new ViewHolder();
  89. viewHolder.title = (TextView) convertView.findViewById(R.id.title);
  90. viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
  91. convertView.setTag(viewHolder);
  92. } else
  93. {
  94. viewHolder = (ViewHolder) convertView.getTag();
  95. }
  96. viewHolder.title.setText(pictures.get(position).getTitle());
  97. viewHolder.image.setImageResource(pictures.get(position).getImageId());
  98. return convertView;
  99. }
  100. }
  101. class ViewHolder
  102. {
  103. public TextView title;
  104. public ImageView image;
  105. }
  106. class Picture
  107. {
  108. private String title;
  109. private int imageId;
  110. public Picture()
  111. {
  112. super();
  113. }
  114. public Picture(String title, int imageId)
  115. {
  116. super();
  117. this.title = title;
  118. this.imageId = imageId;
  119. }
  120. public String getTitle()
  121. {
  122. return title;
  123. }
  124. public void setTitle(String title)
  125. {
  126. this.title = title;
  127. }
  128. public int getImageId()
  129. {
  130. return imageId;
  131. }
  132. public void setImageId(int imageId)
  133. {
  134. this.imageId = imageId;
  135. }
  136. }

main.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <GridView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/gridview"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:columnWidth="90dp"
  7. android:numColumns="auto_fit"
  8. android:verticalSpacing="10dp"
  9. android:horizontalSpacing="10dp"
  10. android:stretchMode="columnWidth"
  11. android:gravity="center"
  12. />

picture_item.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout
  3. xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:id="@+id/root"
  5. android:orientation="vertical"
  6. android:layout_width="wrap_content"
  7. android:layout_height="wrap_content"
  8. android:layout_marginTop="5dp"
  9. >
  10. <ImageView
  11. android:id="@+id/image"
  12. android:layout_width="100dp"
  13. android:layout_height="150dp"
  14. android:layout_gravity="center"
  15. android:scaleType="fitXY"
  16. android:padding="4dp"
  17. />
  18. <TextView
  19. android:id="@+id/title"
  20. android:layout_width="wrap_content"
  21. android:layout_height="wrap_content"
  22. android:layout_gravity="center"
  23. android:gravity="center_horizontal"
  24. />
  25. </LinearLayout>

效果图:




原创粉丝点击