在androidsetFastScrollEnabled(true);
中用于ListView
快速滚动。
当 中的项目较少时,此快速滚动不起作用ListView
。我在某处读到,只有当 listview 总高度是 listview 可见高度的 4 倍或更多时,android 中的快速滚动才有效。我花了几个小时试图在框架源代码中找到它,但我找不到它。
有人可以指出我在 android 框架源代码中放置此条件以在 ListView 中的项目较少时禁用快速滚动。
在androidsetFastScrollEnabled(true);
中用于ListView
快速滚动。
当 中的项目较少时,此快速滚动不起作用ListView
。我在某处读到,只有当 listview 总高度是 listview 可见高度的 4 倍或更多时,android 中的快速滚动才有效。我花了几个小时试图在框架源代码中找到它,但我找不到它。
有人可以指出我在 android 框架源代码中放置此条件以在 ListView 中的项目较少时禁用快速滚动。
是的,当然,这是链接:
这是第 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 时才有效。如果你想用更少的值来做,那么你需要使用反射或创建自定义类。
编辑:
对于最新版本,有链接: http: //grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/widget/FastScroller.java/
线路是 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");
}
它没有经过测试,所以我不知道它是否真的有效。
您可以尝试设置属性
android:fastScrollAlwaysVisible="true"
在你的列表视图 xml