给GridView设置行高
来源:互联网 发布:阿里云幕布是免费的吗 编辑:程序博客网 时间:2024/05/16 10:33
最近在工作中遇到了这样一个问题,使用一个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;@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
大家互相探讨,互相进步.
0 0
- 给GridView设置行高
- Gridview 设置行高
- android gridview 行高设置
- android gridview 行高设置
- IE10.Gridview后台设置行高
- 如何给WPF TextBox设置行高
- 给gridview子项设置宽高考虑屏幕适配
- GridView根据内容自动设置列宽、行高
- Android GridView设置行高,即item高度
- Android给GridView设置单元格分割线
- 给listview或gridview设置动画效果
- 自定义GridView宽高设置问题,
- 设置gridview的item的宽高
- 控制GridView中的行高
- 给UltraEdit设置Verilog语法高亮
- 给UltraEdit设置Verilog语法高亮
- 给UltraEdit设置Verilog语法高亮
- 给GridView的item动态设置Color Selector
- form不换行
- Android:apk反编译教程
- 调试qbo_video_record问题
- Valgrind的使用方法
- 《js倒计时效果》之限时抢
- 给GridView设置行高
- 应23code群友:特写上我自己的代码:android程序快捷方式的创建与删除
- input子系统三之重要函数的分析
- Thrift 应用场景(收集版)
- Java面试中常考集合总结
- MYSQL优化-存储引擎
- error of compiling cmake
- 工欲善其事必先利其器-----eclipse的快捷键(有待整理和使用)
- python核心编程第九章答案