2012-02-28 52 views
3

我有嵌套的listView。如何强制listView的高度为每个行都可见的大小? ListView嵌套在ScrollView中,因此滚动对ListView不起作用,所以我需要让所有项目在嵌套离子ScrollView的ListView中可见(上面和下面有更多的东西)。如何强制listView的高度为每个行都可见的大小?

+4

在这种情况下,您不应该使用'ListView'。正常的垂直'LinearLayout'和重复调用'ListAdapter#getView' - 然后添加到'LinearLayout'(只需记住添加点击监听器)。 – Jens 2012-02-28 14:50:21

+0

在ScrollView中使用ListView效率不高。重新考虑你的UI设计。 – Mbt925 2012-03-08 18:29:52

+0

可能的重复[如何将ListView放入ScrollView而不崩溃?](http://stackoverflow.com/questions/3495890/how-can-i-put-a-listview-into-a-scrollview-没有它崩溃) – Lennart 2013-09-18 10:08:40

回答

0

您可以使用此code.listview包含此属性

android:minheight="20dp"; 
+0

用于多屏幕支持;我想这不是一个好主意...... – Bhuro 2016-08-10 12:49:39

4

要计算的ListView hieght

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
     // pre-condition 
     return; 
    } 

    int totalHeight = 0; 
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), 
      MeasureSpec.AT_MOST); 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     View listItem = listAdapter.getView(i, null, listView); 
     listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
     totalHeight += listItem.getMeasuredHeight(); 
    } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight 
      + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 

通行证列表视图对象这一梅索德。

setListViewHeightBasedOnChildren(listView) 
+1

它返回更高的高度,对我来说不起作用:/ – Nininea 2014-10-24 16:17:48

+0

我改变了总高度=(listItem.MeasuredHeight + 45),现在可以,但它我知道的不是很好的解决方案 – Nininea 2014-10-24 16:22:06

+0

我看过的版本使用'listItem.measure(0,0);'但在具有修改的DPI值的电话上使用时,还会返回更大的高度。 – LoungeKatt 2017-04-18 04:48:29

相关问题