【问题标题】:How to override the Android ListView fast scroller appearance如何覆盖 Android ListView 快速滚动条外观
【发布时间】:2012-04-08 18:08:16
【问题描述】:

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

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

我看过源代码:

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

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

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

【问题讨论】:

  • 嗯,您如何覆盖ListView 中的mFastScroller 变量?好吧,不使用反射 .
  • 我可以在私有变量上这样做吗? (对于新手问题,我很抱歉,但我来自 wp7 上的 c#,并且强制强制执行私有 - 反射方法不会让您触及私有)

标签: android listview fastscroll


【解决方案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");
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    相关资源
    最近更新 更多