设置ListView高度以显示所有可用项目

时间:2015-11-27 16:43:59

标签: android listview android-listview

我在ScrollView中有一个ListView。

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

3 个答案:

答案 0 :(得分:8)

如果您想要一个不滚动的项目列表,则称其为线性布局。

如果您愿意,可以自定义listview:

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();    
    }
}

答案 1 :(得分:1)

你可以使用这样的东西,它会扩展列表,所以它不需要滚动。只需记住使用ScrollView将其包装在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

答案 2 :(得分:0)

如果您使用的是ScrollView,如果它的高度大于屏幕大小,它将滚动。无论如何,尝试使用下面的参数来查看它是否符合您的要求。

机器人:layout_height =&#34; WRAP_CONTENT&#34;