listView中item高度设置 listview中每个item的高度都是由里面的内容自适应的这就会出现高度不一致的情况又不能设置成固定高度(前面这些都是需求。。)有没方法可以让高度低的调节到和其中的最大高度一致呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先一股脑填进去,然后遍历整个listview保留item的最大高度,再转回去把这个高度设给每个item 创建完之后如何遍历呢 我是新手我修改了listview的onMeasure方法我已经能够得到这个最大值 但是不知道在哪里能够进行对item高度的重新设置 目前的做法是 先生成了lisview 此时里面的item都是自适应高度因为一开始不知道最大高度是多少 所以必须先让他生成一遍吧生成之后才能使用getchildAt(positon)来取得对应的item 以此取得最大高度最后再把这个高度设置进每一个item但是不知道应该在什么时候设置进去,现在虽然代码写了 但是没有效果我的代码使用java code写的,没用xml 是写在适配器的 getview里面么? public class ListViewSetHeight{ public static void setheight(ListView listView) { ListAdapter listAdapter=listView.getAdapter(); if(listAdapter==null){return;} int maxHeight=0; int itemNum=listAdapter.getCount(); for(int i=0;i<itemNum;i++) { View listItem=listAdapter.getView(i,null,listView); listItem.measure(0,0); int thisHeight=listItem.getMeasuredHeight();//计算子项View的宽高 maxHeight=(maxHeight>thisHeight)?(maxHeight):(thisHeight); } for(int j=0;j<itemNum;j++) { View listItem=listAdapter.getView(i,null,listView); ViewGroup.LayoutParams params=listItem.getLayoutParams(); params.height=maxHeight; listItem.setLayoutParams(params); } }}试一试这个 LinearLayout llmain = new LinearLayout(context); llmain.setOrientation(LinearLayout.VERTICAL); lstView = new MyListView[devs.length]; lstAdapter = new ListAdapter[devs.length]; for(int i = 0; i < devs.length; i++) { TextView txtHmgName = new TextView(context); txtHmgName.setText(devs[i].name); lstView[i] = new MyListView(context); lstAdapter[i] = new ListAdapter(context, devs[i]); lstView[i].setAdapter(lstAdapter[i]); lstView[i].setScrollContainer(false); lstView[i].setScrollingCacheEnabled(false); llmain.addView(txtHmgName); llmain.addView(lstView[i]); ListViewSetHeight.setheight(lstView[i]); }我已经将函数调用放在最后了 还是提醒NULLPOINTEREXCEPTION 应该在哪里调用呢 在listview 的onMeasure函数里添加了该段代码能够取得最大高度但是设置统一高度没有效果 直接设置进去的话 就写死了。。如果case很多,而且后续可能加进去的话 就比较麻烦我现在是在onmearue里计算出最大高度 然后再getview里面把最大高度设置给每个item这样做会浪费点资源,相当于把list画了2遍但是适应性强 把这个方法放在循环后面,参数用llmain android 穿对象 如何修改/data/app目录下程序文件权限 ListView中嵌套SlidingDrawer控件的问题 ubutnu下用adb无法正确识别手机?请高手指点迷津。 新手提问在线等 Tab下的button和ListView都没反应 Android实时录像中如何添加时间戳? jsoup 的问题----在线等啊 Android下的UDP传输协议问题 设计又给我出难题了!内有图有说明! Android程序实现 将成绩查询系统网站登录后的 内容解析下来显示在手机上。。请高人指点如何实现? 怎么把android系统或者android系统的kernel内核烧到真机里啊
我修改了listview的onMeasure方法
我已经能够得到这个最大值
但是不知道在哪里能够进行对item高度的重新设置
因为一开始不知道最大高度是多少 所以必须先让他生成一遍吧
生成之后才能使用getchildAt(positon)来取得对应的item
以此取得最大高度
最后再把这个高度设置进每一个item
但是不知道应该在什么时候设置进去,现在虽然代码写了 但是没有效果
我的代码使用java code写的,没用xml
{
public static void setheight(ListView listView)
{
ListAdapter listAdapter=listView.getAdapter();
if(listAdapter==null){return;}
int maxHeight=0;
int itemNum=listAdapter.getCount();
for(int i=0;i<itemNum;i++)
{
View listItem=listAdapter.getView(i,null,listView);
listItem.measure(0,0);
int thisHeight=listItem.getMeasuredHeight();//计算子项View的宽高
maxHeight=(maxHeight>thisHeight)?(maxHeight):(thisHeight);
}
for(int j=0;j<itemNum;j++)
{
View listItem=listAdapter.getView(i,null,listView);
ViewGroup.LayoutParams params=listItem.getLayoutParams();
params.height=maxHeight;
listItem.setLayoutParams(params);
}
}
}试一试这个
llmain.setOrientation(LinearLayout.VERTICAL);
lstView = new MyListView[devs.length];
lstAdapter = new ListAdapter[devs.length]; for(int i = 0; i < devs.length; i++) {
TextView txtHmgName = new TextView(context);
txtHmgName.setText(devs[i].name);
lstView[i] = new MyListView(context);
lstAdapter[i] = new ListAdapter(context, devs[i]);
lstView[i].setAdapter(lstAdapter[i]);
lstView[i].setScrollContainer(false);
lstView[i].setScrollingCacheEnabled(false);
llmain.addView(txtHmgName);
llmain.addView(lstView[i]);
ListViewSetHeight.setheight(lstView[i]);
}
我已经将函数调用放在最后了 还是提醒NULLPOINTEREXCEPTION 应该在哪里调用呢
能够取得最大高度
但是设置统一高度没有效果
如果case很多,而且后续可能加进去的话 就比较麻烦
我现在是在onmearue里计算出最大高度
然后再getview里面把最大高度设置给每个item
这样做会浪费点资源,相当于把list画了2遍
但是适应性强
把这个方法放在循环后面,参数用llmain