首先先说一下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 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"
android:text="TextView01" android:layout_centerHorizontal="true"
android:id="@+id/itemText">
</TextView>
</RelativeLayout>
- 大小: 6 KB
- 大小: 1.2 KB
分享到:
相关推荐
int pageCount; //总页面数 int curPageIndex = 1;//当前页面 ... GridView1.PageCount.ToString() : (GridView1.PageIndex + 2).ToString()); btnLast.CommandName =GridView1.PageCount.ToString();
最全的gridview学习资料 GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList结合 GridView和CheckBox结合 鼠标移到GridView某一行时改变该行的背景色方法...
1. 为什么不使用GridView的默认分页功能 首先要说说为什么不用GridView的默认的分页功能,GridView控件并非真正知道如何获得一个新页面,它只是请求绑定的数据源控件返回适合规定页面的行,分页最终是由数据源控件...
GridView学习
gridview使用技巧、gridview使用大全、gridview常用问题、gridview常用方法 共12文件 长期收集的 绝对有用
1.主要利用table style的 layout=fixed属性按照当前表头再copy一个table,显示在当前datagrid或gridview的前面. 2.注意:调用的时候,datagrid 或gridview 要有style="table-layout:fixed" 和 width=?? 属性.
非常好用的grodview学习代码,可以直接运行,适合新手学习
包括很多Android GridView学习实例。希望对大家进行android 开发中给予一定帮助
gridview嵌套gridview实现内部gridview不显示完,可滑动,外部也可滑动,解决滑动冲突问题。适用于多种嵌套,listview,scrollview等。
在VS2005下实现GridView内嵌套使用GridView
GridView控件学习
1.GridView无代码分页排序: 2.GridView选中,编辑,取消,删除: 3.GridView正反双向排序: 4.GridView和下拉菜单DropDownList结合: 5.GridView和CheckBox结合: 6.鼠标移到GridView某一行时改变该行的背景色...
ScrollView嵌套GridView不能滚动的问题解决方案,重写GridView方法使其不能滚动,就不会与ScrollView的滚动冲突,从而解决问题
GridView嵌套应用实例GridView嵌套应用实例GridView嵌套应用实例GridView嵌套应用实例GridView嵌套应用实例GridView嵌套应用实例
gridview 删除 添加 更新,完整获得gridview学习资源!
解决GridView和ScrollView冲突问题,自定义GridView来解决
GRIDVIEW动态添加列及RDLC打印GRIDVIEW动态添加列及RDLC打印GRIDVIEW动态添加列及RDLC打印
asp.net中的GridView自定义分页及排序代码,对GridView控件进行扩展,实现效果不错的自定义分页及排序代码,供大家学习参考!
GridView空间中的各种使用方法,包括GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList结合 GridView和CheckBox结合 鼠标移到GridView某一行时改变该行...
打算GridView