如何覆盖Android ListView快速滚动条的外观

时间:2012-03-24 12:31:11

标签: android listview fastscroll

我正在尝试使用FastScroll机制实现ListView,该机制使用时间而不是A-Z

不幸的是,我似乎无法找到FastScroller索引使用的布局 - 它似乎决定显示一个带有非常大的白色文本的小黑方

我看过来源:

这两个似乎都表明关键的快速滚动成员变量是私有的,并且使用的资源ID是固定的:

mOverlayDrawable = res.getDrawable(com.android.internal.R.drawable.menu_submenu_background);

有没有办法覆盖这个?理想情况下我的目标是2.2。以及。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用以下内容进行反思:

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");
}

我只是输入它所以它可能会或者可能不会直接编译,但这就是主意。我没有检查所有版本中的字段是否被调用相同,您可能需要进行调整。