兰山区住房和城乡建设局网站,语言可以做网站吗,青岛网站搭建,中山精品网站建设资讯近期在工作中遇到了这样一个问题,使用一个GridView展示数据,item中仅仅是一个TextView,可是里面显示的文字多少不固定多少,必须所有展示出来. 遇到的问题: 1.把item中的宽和高设置match_parent,还是设置成wrap_content,当内容过多的时候,会覆盖下一行的显示的内容. 2.没有一个属… 近期在工作中遇到了这样一个问题,使用一个GridView展示数据,item中仅仅是一个TextView,可是里面显示的文字多少不固定多少,必须所有展示出来. 遇到的问题: 1.把item中的宽和高设置match_parent,还是设置成wrap_content,当内容过多的时候,会覆盖下一行的显示的内容. 2.没有一个属性能够给GridView设置行高,那么高度就不能控制. 遇到的问题展示:.期望 想到的解决的方法是: 设计思路:1.先把TextView的高度,获取出来 2.把高度存到全局变量中,然后进行和原来的比較,把大的存到全局变量中 3.然后再把全局变量中的高度设置给TextView 如今明确了思路,以下就開始理解代码. 先创建一个activity_main.xml span stylefont-family:SimSun;font-size:18px;RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolsandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent GridViewandroid:idid/mygridviewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:horizontalSpacing10dpandroid:verticalSpacing10dp //RelativeLayout/span 在MainActivity调用 span stylefont-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() {ListString list new ArrayListString();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 stylefont-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 stylefont-family:SimSun;font-size:18px;public class MyAdapter extends BaseAdapter {private Context mContext;private ListString mdata;public MyAdapter(Context mContext, ListString 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