您的位置:首页 > 其它

GridView简单使用

2014-02-26 00:26 399 查看
1.新建活动

public class TestGridView extends Activity {

	private GridView myGridView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.testgridview);
		
		myGridView=(GridView) findViewById(R.id.gridview);
		GrideAdapter adapter=new GrideAdapter(this);
		myGridView.setAdapter(adapter);
		//添加监听器
		myGridView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
					long arg3) {
				// TODO Auto-generated method stub
				Toast.makeText(TestGridView.this, position+"", 1000).show();
			}
		});
	}
}


2.重写适配器

public class GrideAdapter extends BaseAdapter {
	Context context;

	int[] arr = { 1, 2, 3, 4 };

	public GrideAdapter(Context context) {
		this.context = context;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return arr.length;
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		ViewHolder holder = null;
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = LayoutInflater.from(context).inflate(R.layout.line,
					null);
			holder.txt = (TextView) convertView.findViewById(R.id.txt);
			convertView.setTag(holder);
		}else {
			holder=(ViewHolder) convertView.getTag();
		}
		holder.txt.setText(arr[position]+"");
		return convertView;
	}

	public final class ViewHolder {
		public TextView txt;
	}

}


3.界面

<GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnWidth="50dp"
        android:gravity="center"
        android:horizontalSpacing="20dp"
        android:numColumns="2"
        android:stretchMode="spacingWidth"
        android:verticalSpacing="10dp" >
    </GridView>


注意:

1.

android:columnWidth="50dp" :每列的宽度。

android:gravity="center" :子项的位置。

android:horizontalSpacing="20dp" :每列的间距。

android:verticalSpacing="10dp" :每行的间距。

android:numColumns="2" :行数。

属性值: “
auto_fit
”:尽可能多的填充每行。

android:stretchMode="spacingWidth" :缩放。有4个属性值,分别对应 不伸展,每列的间隔拉伸,每列间隔相等,每列间隔同等拉伸。



也许图形的形式更易懂点:

value=3:



value=2:



value=1:



value=0:



想得到居中的效果,就在子列中,设置居中。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/img_eventimg"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@drawable/ic_launcher" >
    </ImageView>

    <TextView
        android:id="@+id/tv_eventname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="text" />

</LinearLayout>


2.

如果想使得GridView不能滑动,那么可以重写GridView类,在使用的时候,在xml写绝对路径。构造方法要写全,不然会报错。

/**
 * 禁止上下滑动的gridview
 */
public class MyGridView extends GridView {

	public MyGridView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}
	
	

	public MyGridView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}

	public MyGridView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	@Override
	public boolean dispatchTouchEvent(MotionEvent ev) {
		// TODO Auto-generated method stub
		if (ev.getAction() == MotionEvent.ACTION_MOVE) {
			return true;// 禁止gridview滑动
		}
		return super.dispatchTouchEvent(ev);
	}

}


3.想改变点击的效果的话,有两种方案:

第一个:

你在drawable中添加点击的xml效果,然后添加在item中。这样,跟你平常的那个效果一样。

@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		//必须初始化,否则报错!不能写为tx=null;
		ImageView tx = new ImageView(context);
		if (convertView == null) {
			convertView = LayoutInflater.from(context).inflate(
					R.layout.activity_main, null);
			tx = (ImageView) convertView.findViewById(R.id.tv);
		}
		if (position == 0 || position == 2) {
			tx.setBackgroundResource(R.drawable.directlog_dirlog);
		}
		return convertView;
	}


第二个:

使用setonitemclicklistener,在conview中,改变效果。

在getview()中添加点击效果的xml文件:

// 改变点击的效果,里面放的是xml文件
		enImg.setImageResource(imgList.get(position));


设置子项点击效果:

// 当点击到具体的每项的时候
		gridView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View view,
					int position, long arg3) {
				// TODO Auto-generated method stub
				intent = new Intent(getActivity(), OneFunction.class);
				intent.putExtra("name", view.getTag().toString());
				getActivity().startActivity(intent);
			}
		});


推荐使用第一种,很方便不是么!!

3.去掉点击的背景颜色:

// 改变点击的背景效果
		gridView.setSelector(new ColorDrawable(color.transparent));


4.关于item过高的问题:

public View getView(int position, View convertView, ViewGroup parent) {
        convertView = LayoutInflater.from(context).inflate(R.layout.item, null);
 
        AbsListView.LayoutParams param = new AbsListView.LayoutParams(
                android.view.ViewGroup.LayoutParams.FILL_PARENT,
                mGv.getHeight()/ROW_NUMBER);
        convertView.setLayoutParams(param);
 
        return convertView;
    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: