Android 如何创建一个';它不在ScrollView中,或者ScrollView已被禁用?

Android 如何创建一个';它不在ScrollView中,或者ScrollView已被禁用?,android,listview,scrollview,Android,Listview,Scrollview,我想要ListView中的一些好东西,比如能够使用ListAdapter、项目选择等等,但我不想要它的ScrollView部分。我想自己以不同的方式实现这一部分(为什么或者如何实现这一点并不是这个问题的重点,所以请不要问“为什么”) 有没有办法使列表视图不在滚动视图中或滚动被禁用?aListView不在ScrollView中。ListView本质上是滚动的。我不相信你可以通过一个简单的API禁用滚动。如果是这样,您可以选择将列表视图子类化,并尝试找到覆盖滚动行为的方法,克隆列表视图并消除滚动行为

我想要ListView中的一些好东西,比如能够使用ListAdapter、项目选择等等,但我不想要它的ScrollView部分。我想自己以不同的方式实现这一部分(为什么或者如何实现这一点并不是这个问题的重点,所以请不要问“为什么”)


有没有办法使列表视图不在滚动视图中或滚动被禁用?

a
ListView
不在
ScrollView
中。
ListView
本质上是滚动的。我不相信你可以通过一个简单的API禁用滚动。如果是这样,您可以选择将
列表视图
子类化,并尝试找到覆盖滚动行为的方法,克隆
列表视图
并消除滚动行为,或者编写自己的
AdapterView
,以您想要的方式呈现内容。

另一种方法是将
列表视图包装到您定制的任何滚动解决方案中。如果您只需将
列表视图的高度设置为与所有行的高度完全相同(使用列表视图的
布局参数
),那么它将像普通视图一样工作,无法滚动;因此,您可以将其添加到另一个滚动视图中。这种方法的困难在于你必须提前知道列表的高度,所以你必须知道每一行的高度。此外,这将一次创建所有行,因此您将无法利用视图回收功能

如果您没有提前计算高度的简便方法,您可以通过覆盖
onMeasure
并为其指定您自己的高度规格,诱使
ListView
为您计算高度:

// Calculate height of the entire list by providing a very large 
// height hint.  But do not use the highest 2 bits of this integer; 
//  those are reserved for the MeasureSpec mode.
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
        MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);

你在这里的评论非常有用。我向你致敬。