美文网首页android基本功Android知识Android开发
解决Listview 在ScrollView中显示不全的问题

解决Listview 在ScrollView中显示不全的问题

作者: 被风扬起的沙 | 来源:发表于2016-11-03 11:02 被阅读1283次

一开始在采用网上搜索的方法:

public void setListViewHeightBasedOnChildren(ListView listView) {    
   ListAdapter listAdapter = listView.getAdapter();   
   if (listAdapter == null) {      
     return;    
   }    
  int totalHeight = 0;    
  for (int i = 0; i < listAdapter.getCount(); i++) {    
   View listItem = listAdapter.getView(i, null, listView);            
   listItem.measure(0, 0);       
   totalHeight += listItem.getMeasuredHeight();  
 }    
  ViewGroup.LayoutParams params = listView.getLayoutParams();          
  params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
  listView.setLayoutParams(params);
}

先给listView设置adapter,然后再采用上图的方法,这样就把条目显示出来了。

但是后期再运用的时候出现了问题,就是条目里面的高度不确定,文字的行数是1行或者两行不能写死,效果如下:

Paste_Image.png

原先的方法只能用于固定高度的条目,而不能用于不确定高度的条目。
经同事指点,用下面的自定义listView,代码如下:

public class MyListView extends ListView {   
public MyListView(Context context, AttributeSet attrs, int defStyle) {           
   super(context, attrs, defStyle);   
}   
public MyListView(Context context, AttributeSet attrs) {         
   super(context, attrs);  
 }   
public MyListView(Context context) {     
    super(context);  
 }   
@Override    
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {            
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST); 
super.onMeasure(widthMeasureSpec, expandSpec);   
}
}

这样不固定的条目就能展示了。

小提示: 在设置listView的距离屏幕间距的时候,不要在listview的XML里面设置,而是在条目里面的XML里面设置。
这是为了后期的扩展,有可能添加点击效果,一般都是在条目XML里面设置background,如果在listView里设置间距的话,点击的效果就会空出两个间隔的白边。

相关文章

网友评论

  • BrokenDust:这种做法问题太大了!
    被风扬起的沙:@BrokenDust 小数据的话应该没事吧。亲,有没有更好的解决方法啊
  • hfk:第二种如果嵌套在listview中,会造成getview重复调用多次,多次重绘
    hfk: @被风扬起的沙 linearlayout+addview
    被风扬起的沙:@hfk 亲,有没有更好的解决方法啊
  • 冰鉴IT:赞,以前一直是用第一种方法
    被风扬起的沙:@冰鉴IT :smile: 经历了才懂得啊

本文标题:解决Listview 在ScrollView中显示不全的问题

本文链接:https://www.haomeiwen.com/subject/ykvbuttx.html