我正在尝试使用FastScroll机制来实现ListView,该机制使用时间而不是a-Z
不幸的是,我似乎找不到进入FastScroller索引使用的布局的方法——它似乎决心显示一个黑色的小正方形和非常大的白色文本
我已经查看了来源:
- http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.0_r1/android/widget/FastScroller.java/
- http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.3_r1/android/widget/AbsListView.java#AbsListView
这两个似乎都表明关键的快速滚动成员变量是私有的,并且使用的资源id是固定的:
mOverlayDrawable = res.getDrawable(com.android.internal.R.drawable.menu_submenu_background);
有什么办法可以推翻这一点吗?理想情况下,我的目标是2.2。及以上。
您可以尝试使用类似于以下内容的反射:
try {
Field scrollerField = AbsListView.class.getDeclaredField("mFastScroller"); //java.lang.reflect.Field
scrollerField.setAccessible(true);
FastScroller instance = scrollerField.get(listViewInstance);
Field overlayField = instance.getClass().getDeclaredField("mOverlayDrawable");
overlayField.setAccessible(true);
overlayField.set(instance, yourValueHere);
} catch (Exception e) {
Log.d("Error", "Could not get fast scroller");
}
我只是把它打出来,这样它可能会直接编译,也可能不会直接编译,但这就是我的想法。我没有检查所有版本中的字段是否调用相同,您可能需要进行调整。