android - Android上ListView的限制高度

标签 android listview layout android-layout

我想在 ListView 下显示一个按钮。问题是,如果 ListView 得到扩展(添加的项目...),按钮就会被推出屏幕。

我尝试了一个带有权重的 LinearLayout(如 Android: why is there no maxHeight for a View? 中所建议的那样),但要么我的权重有误,要么它根本不起作用。

另外,我在某处发现了使用 RelativeLayout 的提示。 ListView 然后将使用 android:layout_above 参数设置在按钮上方。

问题是我不知道之后如何定位按钮。在我找到的示例中,使用 android:layout_alignParentBottom 调整了 ListView 下方的 View ,但我不希望我的按钮紧贴屏幕底部。

除了使用 setHeight 方法和一些计算所需空间之外还有什么想法吗?


编辑: 我得到了很多有用的答案。

  • bigstone 和 user639183 的解决方案几乎完美运行。但是,我必须在按钮底部添加一个额外的填充/边距,因为它仍然会被推到屏幕的一半(但随后停止)

  • 如果您希望将按钮固定在屏幕底部,Adinia 仅使用相对布局的答案就可以了。这不是我想要的,但可能对其他人有用。

  • AngeloS 的解决方案是我最后选择的,因为它只是创建了我想要的效果。但是,我对按钮周围的 LinearLayout 做了两个小改动:

    • 首先,因为我不想在布局中包含任何绝对值,所以我将 android:layout_height="45px" 更改为 wrap_content,工作得很好。

    • 其次,由于我希望按钮水平居中,只有垂直 LinearLayout 支持,所以我将 android:orientation="horizo​​ntal"更改为 "vertical"。

    AngeloS 在他最初的帖子中也表示,他不确定 ListView 周围的 LinearLayout 中的 android:layout_weight="0.1" 参数是否code> 有任何影响;我刚试过,它确实做到了!否则,按钮会再次被推出屏幕。

最佳答案

我在代码中解决了这个问题,只有当 ListView 中包含超过 5 个项目时才设置它的高度:

if(adapter.getCount() > 5){
        View item = adapter.getView(0, null, listView);
        item.measure(0, 0);         
        ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(LayoutParams.MATCH_PARENT, (int) (5.5 * item.getMeasuredHeight()));
        listView.setLayoutParams(params);
}

请注意,我将最大高度设置为单个项目高度的 5.5 倍,因此用户肯定会知道需要进行一些滚动操作! :)

关于android - Android上ListView的限制高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5487552/

相关文章:

qt - QML:原始模型中的动态 View 重新排序

android - 在 ListView 中隐藏页脚 View ?

android - 如何让 GridView 在其 LinearLayout 父级中居中?

Android Retrofit RestAdapter 在断开连接时获得失败状态

java - 自动将变量写入子类

android - 对Android中SQLite数据库初始化的困惑

java - 在Request Android Studio中做一个Toast

android - Android 中的响应式设计与外部图像?

javascript - width() 在 DOM 对象上返回 `null`