在android setFastScrollEnabled(true);
中用于快速滚动ListView
。
当ListView
中的项目较少时,此快速滚动不起作用。我在某处读到,只有当listview总高度是listview可见高度的4倍或更多时,android中的快速滚动才有效。我花了好几个小时试图在框架源代码中找到它,但我无法找到它。
有人可以指向我放置在android框架源代码中,当ListView中的项目较少时,此条件禁用快速滚动。
答案 0 :(得分:8)
是的,这是链接:
这是第224-227行之间的条件。并且为了设置显示快速滚动所需的页数,有一个常量:
private static int MIN_PAGES = 4;
关于禁用它...这是一个私人领域,所以没有简单的方法去做。您可以尝试使用反射或基于原始创建自定义FastScroller。 但我认为最简单的方法是在Android代码中检查这个条件:
//pseudocode
int numberOfPages = listView.itemsCount / listView.visibleItemsCount;
if(numberOfPages > yourValue)
listView.setFastScrollEnabled(true);
else
listView.setFastScrollEnabled(false);
但它可能只有在yourValue
大于4时才有效。如果你想用更少的值来做,那么你需要使用反射或创建自定义类。
编辑:
线条是444-447:)
对于反思,我会尝试这样的事情:
try {
Field scrollerField = AbsListView.class.getDeclaredField("mFastScroller"); //java.lang.reflect.Field
scrollerField.setAccessible(true);
FastScroller instance = scrollerField.get(listViewInstance);
Field minPagesField = instance.getClass().getDeclaredField("MIN_PAGES");
minPagesField.setAccessible(true);
minPagesField.set(instance, yourValue);
} catch (Exception e) {
Log.d("Error", "Could not get fast scroller");
}
它没有经过测试,所以我不知道它是否真的有用。
答案 1 :(得分:0)
您可以尝试设置属性
android:fastScrollAlwaysVisible="true"
列表视图中的xml