我想为我的用户显示个人资料屏幕。
它必须具有三个 View (2 个 Buttons
和一个 ImageView
)和一个 ListView
以显示该用户制作的内容。
但是,我不希望 ListView
滚动。相反,我希望它尽可能大,并将我的所有 View 放在一个 ScrollView
中,这样三个第一个 View 就会随着 ListView
滚动出来。当然,这不会按预期工作。
我所有的三个项目都在 LinearLayout
内。我曾想过让它们成为 ListView
中的第一项,但这导致它们可以作为第一项被选择,并且不得不进行一些不需要的编码。
有没有一种简单的方法可以做到这一点,还是我必须坚持让布局成为我的 ListView 中的第一项?
最佳答案
我为此找到了一个非常简单的解决方案。只需获取 ListView 的适配器并在显示所有项目时计算其大小。 优点是此解决方案也适用于 ScrollView。
例子:
public static void justifyListViewHeightBasedOnChildren (ListView listView) {
ListAdapter adapter = listView.getAdapter();
if (adapter == null) {
return;
}
ViewGroup vg = listView;
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View listItem = adapter.getView(i, null, vg);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams par = listView.getLayoutParams();
par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
listView.setLayoutParams(par);
listView.requestLayout();
}
通过您的 ListView 对象调用此函数:
justifyListViewHeightBasedOnChildren(myListview);
上面显示的功能是对帖子的修改: Disable scrolling in listview
请注意在将适配器设置为 ListView 后调用此函数。如果适配器中条目的大小发生了变化,您也需要调用该函数。
关于android - 禁用 ScrollView 中包含的 ListView 的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212890/