2015-11-27 42 views
0

我在ScrollView中有一个ListView。设置ListView高度以显示所有可用项目

如何设置ListView的高度,使其适配器中的所有项都适合它,并且不需要滚动。

+0

你想滚动布局而不是列表? –

+3

不要在滚动视图中放置一个listview(它不推荐)。如果你想要一个不滚动的项目列表,它被称为线性布局。 – phongvan

+0

@UdiIdan是的,正好 – mustafa

回答

5

如果你想要一个不滚动的项目列表,它被称为线性布局。

不然,如果你愿意,你可以自定义列表视图为:

public class NonScrollListView extends ListView { 

    public NonScrollListView(Context context) { 
     super(context); 
    } 
    public NonScrollListView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    public NonScrollListView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 
    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      int heightMeasureSpec_custom = MeasureSpec.makeMeasureSpec(
        Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 
      super.onMeasure(widthMeasureSpec, heightMeasureSpec_custom); 
      ViewGroup.LayoutParams params = getLayoutParams(); 
      params.height = getMeasuredHeight();  
    } 
} 
+0

谢谢,这是一个不错的解决方案 – mustafa

+0

完美的解决方案。 – Jim

1

您可以使用这样的事情,它会展开列表,所以它不会需要滚动。只记得有一个滚动型来包装它在你的XML:

<ScrollView 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" > 

和类:

public class ExpandedListView extends ListView { 

private android.view.ViewGroup.LayoutParams params; 
private int old_count = 0; 

public ExpandedListView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    if (getCount() != old_count) { 
     old_count = getCount(); 
     params = getLayoutParams(); 
     params.height = getCount() * (old_count > 0 ? getChildAt(0).getHeight() : 0); 
     setLayoutParams(params); 
    } 

    super.onDraw(canvas); 
} 
} 

您也可以参考这个问题,这将是有益的: Calculate the size of a list view or how to tell it to fully expand

0

如果您正在使用ScrollView,如果它的内容高度大于屏幕尺寸,它将滚动。任何方式,尝试使用参数波纹管,看看它是否做你想要的。

android:layout_height =“wrap_content”

相关问题