GridView学习心得及发现的问题

来源:互联网 发布:猫云seo seojsc 编辑:程序博客网 时间:2024/06/04 19:08
     首先先说一下GridView是什么?还有什么功能?从字面上理解呢,就是格子视图了。
     功能:可以将你想要的控件ImageView或者TextView,或者你也可以在一个格子里显示多个组件,如显示文件夹里的文件时,不仅要想显示它的图标,同时在下方也要显示它的文件名,但是GridView究竟是如何显示的,它需要做什么样的准备工作,需要你告诉它什么信息,只有知道了这些,我们才能使用好它。
    
    注意GridView会出现这样的问题,当你把窗口设置为全屏幕时,显示出来的效果会在上方占据一个黑条,不论是模拟器还是实机都是一样。

通过Hierarchy View 工具查看时,我们可以看到它理论上要显示的效果,是没有上方的黑条,有可能是GridView自身的漏洞,如果有同学能够解决的,麻烦请留言指教


附上实现全屏幕的代码:
 this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

通过开发文档"A view that shows items in two-dimensional scrolling grid. The items in the grid come from the ListAdapter associated with this view."我们知道它的实现是要通过适配器ListAdapter,但我们也可以通过构建自己的适配器,它继承于BaseAdapter,在这个适配器里我们可以实现自己想要的功能,
public class MyAdapter extends BaseAdapter{            @Override            public int getCount() {                  // TODO Auto-generated method stub                  return 0;            }            @Override            public Object getItem(int arg0) {                  // TODO Auto-generated method stub                  return null;            }            @Override            public long getItemId(int position) {                  // TODO Auto-generated method stub                  return 0;            }            @Override            public View getView(int position, View convertView, ViewGroup parent) {                  // TODO Auto-generated method stub                  return null;            }                  }
这里面的四个方法是当你要执行GridView.setAdapte(new MyAdapter)这行代码时要调用到的,所以它的方法都是用get作为前辍,而我们要做的就是覆写这些方法以备于它的调用。
getCout:设置要显示格子的数量,一定要修改,设置为0时GridView不显示任何内容
getItem(int arg0:调用这个方法可以返回某个格子里的对象,可以不设置
getItemId(int position):调用这个方法返回某个格子里对象的id,也可以不设置
getView(int position, View convertView, ViewGroup parent):这个就是用来显示你的组件了,在文档里它的代码如下:
public View getView(int position, View convertView, ViewGroup parent){ ImageView imageView; if (convertView == null) {// if it's not recycled, initialize some attributesimageView.setLayoutParams(new GridView.LayoutParams(85, 85));imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);imageView.setPadding(8, 8, 8, 8);} else { imageView = (ImageView) convertView;}imageView.setImageResource(mThumbIds[position]);return imageView;}
当第一次显示时,covertView为null,这时我们创建一个控件,有两种方法:
第一种:
     为文档所显示的,通过外部传入的Context mContext创建一个控件imageView,并用setLayoutParams(new GridView.LayoutParams
(85, 85))设置它的大小,setScaleType设置裁剪类型,setPadding设置边距
第二种:
     首先:构造一个LayoutInflater可以将XML文件实例化,并用setTag方法设置要显示的组件
    
public View getView(int index, View convertView, ViewGroup parent) {            GridHolder holder;            ImageView imageView;            if (convertView == null) {                    convertView = mInflater.inflate(R.layout.grid_item, null);                    imageView = (ImageView)convertView.findViewById(R.id.itemImage);                  convertView.setTag(imageView);            }else{                  imageView = (ImageView) convertView.getTag();            }          imageView.setImageResource(mThumbIds[position]);            return convertView;      }

附:
GridTest.javapackage com.grid.test;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.Window;import android.view.WindowManager;import android.widget.GridView;public class GridTest extends Activity {     private GridView gridview ;     private List<GridInfo> list;     private GridAdapter adapter;    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.gridlayout);        gridview = (GridView) findViewById(R.id.gridview);        adapter = new ImageAdapter(this);        gridview.setAdapter(adapter);    }}
//这是第一种方法,第二种方法请自行替换
ImageAdapter.javapublic class ImageAdapter extends BaseAdapter {    private Context mContext;    public ImageAdapter(Context c) {        mContext = c;    }    public int getCount() {        return mThumbIds.length;    }    public Object getItem(int position) {        return null;    }    public long getItemId(int position) {        return 0;    }    // create a new ImageView for each item referenced by the Adapter    public View getView(int position, View convertView, ViewGroup parent) {        ImageView imageView;        if (convertView == null) {  // if it's not recycled, initialize some attributes            imageView = new ImageView(mContext);            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);            imageView.setPadding(8, 8, 8, 8);        } else {            imageView = (ImageView) convertView;        }        imageView.setImageResource(mThumbIds[position]);        return imageView;    }    // references to our images    private Integer[] mThumbIds = {            R.drawable.sample_2, R.drawable.sample_3,            R.drawable.sample_4, R.drawable.sample_5,            R.drawable.sample_6, R.drawable.sample_7,            R.drawable.sample_0, R.drawable.sample_1,            R.drawable.sample_2, R.drawable.sample_3,            R.drawable.sample_4, R.drawable.sample_5,            R.drawable.sample_6, R.drawable.sample_7,            R.drawable.sample_0, R.drawable.sample_1,            R.drawable.sample_2, R.drawable.sample_3,            R.drawable.sample_4, R.drawable.sample_5,            R.drawable.sample_6, R.drawable.sample_7    };}

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:numColumns="auto_fit"      android:scrollbars="none"/>
grid_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:id="@+id/itemImage"            android:layout_width="wrap_content" android:layout_centerHorizontal="true" android:src="@drawable/icon">      </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>



















原创粉丝点击