近期在工作中遇到了这样一个问题,使用一个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" ><GridViewandroid: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;@Overrideprotected 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 = data;}@Overridepublic int getCount() {if (mdata == null) {return 0;}return mdata.size();}@Overridepublic Object getItem(int position) {return mdata.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {holder = new ViewHolder();convertView = View.inflate(mContext, R.layout.item_griview, null);holder.item = (TextView) convertView.findViewById(R.id.item);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}initKeyTextView(holder.item,position);holder.item.setText((String)getItem(position));return convertView;}class ViewHolder {TextView item;}/*** * @方法名称:initKeyTextView* @描写叙述: TODO* @创建人:yzk* @创建时间:2014年10月15日 上午11:58:22* @备注:获取高度每一个textview的高度,然后进行比較,把最高的设置为TextView的高度* @param ll* @param position* @返回类型:void* @注意点:1,要把获取的item中TextView的高度存放到全局变量中,这样才会其作用. *        2.一定要在addOnGlobalLayoutListener监听器中给TextView设置高度,*         禁止把高度取出,然后在getView中这仅仅高度,这样是无效的* @设计思路:1.先把TextView的高度,获取出来*         2.把高度存到全局变量中,然后进行和原来的比較,把大的存到全局变量中*         3.然后再把全局变量中的高度设置给TextView*/public void initKeyTextView(final View ll, final int position) {ViewTreeObserver vto2 = ll.getViewTreeObserver();vto2.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {ll.getViewTreeObserver().removeGlobalOnLayoutListener(this);if (position % Constant.GRIVEW_COLUMN_NUMS == 0) {Constant.GRIVIEW_COLUMN_HEIGHT = 0;}if (ll.getHeight() > Constant.GRIVIEW_COLUMN_HEIGHT) {Constant.GRIVIEW_COLUMN_HEIGHT = ll.getHeight();}setHeight(ll, Constant.GRIVIEW_COLUMN_HEIGHT);}});}public void setHeight(View ll, int height) {ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, height,Gravity.CENTER));}
}</span>

注意点:

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

此方法中

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

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

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

转载于:https://www.cnblogs.com/wzjhoutai/p/6852182.html

给GridView设置行高相关推荐

  1. excel表格行宽列高怎么设置_excel表格怎么设置行高列宽

    excel表格怎么设置行高列宽 你是怎么调整Excel表格的行高和列宽的? 如果还在用原始的手动调整方法,那你赶紧看看下面这几种解决方法,不仅效率高,而且调整的行高和列宽还很统一整齐哦,快和小编来学习 ...

  2. android+listview设置行高,android – 无法在行xml中设置listView行高的高度

    这是我的自定义适配器的getView方法: public View getView(int position, View convertView, ViewGroup viewGroup) { Sin ...

  3. [VBA] 设置行高和列宽,以及全选单元格

    一.用VBA设置行高和列宽 1.将选定区域内各单元格的行高和列宽设置为指定的数值: Sub SetSpecified()With ActiveWindow.RangeSelection.ColumnW ...

  4. html图片怎么设置行高,html行高怎么设置

    html设置行高的方法:首先创建一个HTML示例文件:然后在body中通过p标签创建几行文本内容:最后通过给文本添加"line-height:20px;"样式来设置行高即可. 本文 ...

  5. 为什么设置行高文字就能居中

    :点上面关注免费学习前端知识! 在设置CSS样式的时候,我们常常设置行高为元素的高度,这样一来,文字就可以在这个元素里面垂直居中了,那这是为什么呢?今天就来分析原理. 首先,一行文字有顶线.中线.基线 ...

  6. php单元格字体颜色,PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽...

    PHPExcel API接口用法大全,按模板导入excel,美化excel,导出图片,设置单元格字体颜色背景色边框,合并单元格,设置行高列宽 2020-08-31 85 一:读取excel表模板$ph ...

  7. 使用REPT功能设置行高

    Thanks to AlexJ for suggesting a great use for the REPT function – setting a minimum row height. He ...

  8. excel设置行高等于列宽_如何在Excel中设置行高和列宽

    excel设置行高等于列宽 By default, when you create a new workbook in Excel, the row height and column width i ...

  9. 腾讯文档的表格设置行高

    ctrl+a将表格全选,右上角点击这个图标 设置行高

最新文章

  1. linux 正则查找email_Linux 正则表达式详解
  2. 【原创】Eclipse实现图形化界面插件-vs4e
  3. SAP Spartacus 3.0部署在development environment上
  4. 动手造轮子:实现一个简单的基于 Console 的日志输出
  5. 关于重装系统后或打补丁后不能上网的问题的解决
  6. Nat Genet | 杨俊/岳峰团队合作揭示GATA3的遗传性非编码变异增加儿童急性淋巴细胞白血病风险的新机制...
  7. 面对自然灾害,科技能做什么?
  8. 《转》Babel 入门教程
  9. 微信安装正确操作方法
  10. 笔记本电脑开不了机怎么重装系统?小熊U盘重装win7系统教程
  11. 算法题目打卡:Ques20201008
  12. /usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录
  13. 漫话:如何给女朋友解释为什么有些网站域名不以www开头
  14. 【期末不挂科 数据结构】第一章 绪论
  15. 计算机休眠期死机,电脑休眠状态频繁死机怎么处理
  16. 科目二考试全流程详解
  17. mmorpg小地图系统制作
  18. 开源商城项目无法打开问题
  19. 5.代码C语言程序设计
  20. 免费好用的外网映射工具

热门文章

  1. java语言中json转换,JSON字符串和JAVA语言对象的相互转换教程
  2. c语言程序设计的几种循环,C语言程序设计教案 第六章 循环程序设计.doc
  3. linux ssh服务,Linux配置SSH服务以便实现远程连接
  4. python源码脚本实例_python编写一个会算账的脚本的示例代码
  5. 命名空间中不存在名称_原木定制中不开裂的木材真的存在吗?
  6. 计算机硬件系统教具,计算机硬件系统 (2)
  7. lte核心网由哪些设备组成_电气设备安装工程由哪些部分组成?
  8. c语言高斯白序列x,C语言程序设计程设计指导书(晓庄).doc
  9. mysql jion 三张_mysql三张表 left join
  10. php生成pdf中文断码_Rmarkdown导出中文PDF解决方案