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

问题描述:

我试图实现与使用时间,而不是AZ如何覆盖了Android的ListView快速滚动外观

一个FastScroll机制,一个ListView不幸的是,我似乎无法找到一种方法将被使用的布局FastScroller指数 - 它似乎决心要展现出小黑方块具有非常大的白色文本

我看了来源:

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

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

有什么办法来覆盖这一点?理想情况下,我的目标是2.2。以上。

+0

嗯,你甚至会重写'ListView'中的'mFastScroller'变量吗?那么,没有使用反射。 – dmon 2012-03-24 13:42:52

+0

我可以在私有变量上做到这一点吗? (对于新手问题感到抱歉,但我来自wp7上的c#,并强调强制执行 - 反射方法不会让你触碰私有) – Stuart 2012-03-24 14:08:11

您可以用这样的反思尝试:

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

我只是打字出来,所以它可能会或可能不会直接编译了蝙蝠,但是这是想法。我没有检查这些字段是否在所有版本中都是相同的,您可能需要进行调整。

+0

谢谢+1 - 将尝试 – Stuart 2012-03-25 09:57:51