2

我正在尝试使用使用时间而不是 AZ 的 FastScroll 机制实现 ListView

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

我查看了源代码:

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

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

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

4

1 回答 1

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

我只是把它打出来,所以它可能会也可能不会直接编译,但这就是想法。我没有检查所有版本中的字段是否都被称为相同,您可能需要进行调整。

于 2012-03-24T21:41:19.470 回答