首页 > 代码库 > 给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>
<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设置行高
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。