如何覆盖了Android的ListView快速滚动外观
问题描述:
我试图实现与使用时间,而不是AZ如何覆盖了Android的ListView快速滚动外观
一个FastScroll机制,一个ListView不幸的是,我似乎无法找到一种方法将被使用的布局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");
}
我只是打字出来,所以它可能会或可能不会直接编译了蝙蝠,但是这是想法。我没有检查这些字段是否在所有版本中都是相同的,您可能需要进行调整。
+0
谢谢+1 - 将尝试 – Stuart 2012-03-25 09:57:51
嗯,你甚至会重写'ListView'中的'mFastScroller'变量吗?那么,没有使用反射。 –
dmon
2012-03-24 13:42:52
我可以在私有变量上做到这一点吗? (对于新手问题感到抱歉,但我来自wp7上的c#,并强调强制执行 - 反射方法不会让你触碰私有) – Stuart 2012-03-24 14:08:11