首页 > 代码库 > 给GridView设置行高

给GridView设置行高

近期在工作中遇到了这样一个问题,使用一个GridView展示数据,item中仅仅是一个TextView,可是里面显示的文字多少不固定多少,必须所有展示出来.

遇到的问题:

 1.把item中的宽和高设置match_parent,还是设置成wrap_content,当内容过多的时候,会覆盖下一行的显示的内容.

 2.没有一个属性能够给GridView设置行高,那么高度就不能控制.

遇到的问题展示:技术分享.期望技术分享

想到的解决的方法是:

   设计思路:1.先把TextView的高度,获取出来
    2.把高度存到全局变量中,然后进行和原来的比較,把大的存到全局变量中
    3.然后再把全局变量中的高度设置给TextView


如今明确了思路,以下就開始理解代码.

 先创建一个activity_main.xml

<span style="font-family:SimSun;font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <GridView
        android:id="@+id/mygridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="10dp" />

</RelativeLayout></span>


在MainActivity调用

<span style="font-family:SimSun;font-size:18px;">package com.example.gridviewdemo;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class MainActivity extends Activity {

	private GridView mygridview;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		initData();
	}

	private void initView() {
		mygridview = (GridView) findViewById(R.id.mygridview);
		mygridview.setNumColumns(Constant.GRIVEW_COLUMN_NUMS);
	}

	/**
	 * 
	 * @方法名称:initData
	 * @描写叙述: TODO
	 * @创建人:yzk
	 * @创建时间:2014年10月15日 下午2:17:28
	 * @备注:初始化数据
	 * @返回类型:void
	 */
	private void initData() {
		List<String> list = new ArrayList<String>();
		list.add("新闻");
		list.add("体育");
		list.add("娱乐");
		list.add("我爱探险");
		list.add("123");
		list.add("我爱骑车旅游");
		list.add("相信自己,万事开头难,我的地盘我做主");
		list.add("珍爱生命,人人有责");
		list.add("come baby");
		list.add("2002年的第一场雪");
		list.add("冬天的一把火");
		mygridview.setAdapter(new MyAdapter(MainActivity.this, list));
	}

}
</span>

以下是全局变量类.

Constant

<span style="font-family:SimSun;font-size:18px;">package com.example.gridviewdemo;

public class Constant {
	public static int GRIVIEW_COLUMN_HEIGHT = 0;// griview设置的高度
	public static int GRIVEW_COLUMN_NUMS = 4;// 列数
}
</span>

创建GriView的适配器

<span style="font-family:SimSun;font-size:18px;">public class MyAdapter extends BaseAdapter {

	private Context mContext;
	private List<String> mdata;

	public MyAdapter(Context mContext, List<String> data) {
		super();
		this.mContext = mContext;
		this.mdata = http://www.mamicode.com/data;>
注意点:

      1,要把获取的item中TextView的高度存放到全局变量中,这样才会其作用. 
      2.一定要在addOnGlobalLayoutListener监听器中给TextView设置高度,
     禁止把高度取出,然后在getView中这仅仅高度,这样是无效的,(取出的是0,或许源码中用final修饰了,              详细的原因还不清楚,请高手,请给指点一下)

此方法中

 在上面用到了ViewTreeObserver动态的获取view的高度,假设想了解其它动态方法,请点击

 源代码下载:http://download.csdn.net/detail/forwardyzk/8041089

  大家互相探讨,互相进步.

给GridView设置行高