【问题标题】:Set ListView height to display all available items设置 ListView 高度以显示所有可用项
【发布时间】:2015-11-27 16:43:59
【问题描述】:

我在 ScrollView 中有一个 ListView。

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

【问题讨论】:

  • 你想滚动布局而不是列表?
  • 不要将列表视图放在滚动视图中(不推荐)。如果您想要一个不滚动的项目列表,则称为线性布局。
  • @UdiIdan 是的,完全正确
  • 嵌套可滚动视图会导致糟糕的用户体验。
  • @FrankN.Stein mdtuyen 的 NonScrollListView 不滚动。还是有问题吗?

标签: android listview android-listview


【解决方案1】:

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

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

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

【讨论】:

  • 完美解决方案。
  • 效果很好。但是如何为每个项目行设置高度、填充、...?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    android:layout_height="wrap_content"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 1970-01-01
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多