GridView学习心得及发现的问题
2013-07-26 00:14
253 查看
首先先说一下GridView是什么?还有什么功能?从字面上理解呢,就是格子视图了。
功能:可以将你想要的控件ImageView或者TextView,或者你也可以在一个格子里显示多个组件,如显示文件夹里的文件时,不仅要想显示它的图标,同时在下方也要显示它的文件名,但是GridView究竟是如何显示的,它需要做什么样的准备工作,需要你告诉它什么信息,只有知道了这些,我们才能使用好它。
注意:GridView会出现这样的问题,当你把窗口设置为全屏幕时,显示出来的效果会在上方占据一个黑条,不论是模拟器还是实机都是一样。
通过Hierarchy View 工具查看时,我们可以看到它理论上要显示的效果,是没有上方的黑条,有可能是GridView自身的漏洞,如果有同学能够解决的,麻烦请留言指教
附上实现全屏幕的代码:
通过开发文档"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,在这个适配器里我们可以实现自己想要的功能,
getCout:设置要显示格子的数量,一定要修改,设置为0时GridView不显示任何内容
getItem(int arg0:调用这个方法可以返回某个格子里的对象,可以不设置
getItemId(int position):调用这个方法返回某个格子里对象的id,也可以不设置
getView(int position, View convertView, ViewGroup parent):这个就是用来显示你的组件了,在文档里它的代码如下:
第一种:
为文档所显示的,通过外部传入的Context mContext创建一个控件imageView,并用setLayoutParams(new GridView.LayoutParams
(85, 85))设置它的大小,setScaleType设置裁剪类型,setPadding设置边距
第二种:
首先:构造一个LayoutInflater可以将XML文件实例化,并用setTag方法设置要显示的组件
附:
大小: 6 KB
大小: 1.2 KB
查看图片附件
功能:可以将你想要的控件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 attributes 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; }当第一次显示时,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.java package 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.java public 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" b0ba android:text="TextView01" android:layout_centerHorizontal="true" android:id="@+id/itemText"> </TextView> </RelativeLayout>
大小: 6 KB
大小: 1.2 KB
查看图片附件
相关文章推荐
- Android - 通过真实案例学习解内存泄漏问题,最终发现Android原生Bug
- sizeof ( )——在学习openCV中 create matrix 时发现的问题
- Android学习心得(一)记录一个问题
- Android学习心得① - GridView设置分割线的一种简单方法
- 计算机科学与技术学习心得之计算机理论的一个核心问题--续谈其他的一些计算数学(转载)
- 学习心得——数组作为函数参数后sizeof获取不到数组在内存中所占字节数的问题
- 现在也是边写需求工具边学习dbforms,其间也发现一些问题,特别是效率问题,希望下一般本会更好
- Gridview连接access数据库更新数据学习心得
- 疯狂java讲义学习数据类型问题及心得
- 黑马程序员—我在学习飞行棋的时候发现的一些问题
- 《算法导论》学习心得(一)——分治求最大子数问题
- activeMQ学习之三(常见的一些问题和心得)
- 今天发现的关于gridview不显示内容的问题
- VTK学习心得:安装经历+小问题解决
- 看完了第二遍C++Primer,学习心得与问题
- 记录学习中遇到的问题和解决方案,随着技术提高不断分析心得
- 学习 JpGraph心得以及一些常见问题解决
- 实现GridView多表头,表头合并,表头分组,多行支持,使用中发现问题告诉我。
- 记录自己学习心得以及工作中遇到问题的总结
- MapXtreme 2005 学习心得 关于地图投影坐标问题的解决方式(十四)