如何在Android中以编程方式设置scrollbar thumb?

dre*_*ale 12 android scrollbar

我知道listview可以像这样在XML中设置滚动条拇指Android:scrollbarThumbVertical等.

但是我在java代码中创建了一个listview实例,我可能需要设置不同的scrollbar thumb.有没有一种方法可以通过编程方式设置滚动条拇指?

Eng*_*uad 24

你可以通过反思实现这一点:

try
{
    Field mScrollCacheField = View.class.getDeclaredField("mScrollCache");
    mScrollCacheField.setAccessible(true);
    Object mScrollCache = mScrollCacheField.get(listview);
    Field scrollBarField = mScrollCache.getClass().getDeclaredField("scrollBar");
    scrollBarField.setAccessible(true);
    Object scrollBar = scrollBarField.get(mScrollCache);
    Method method = scrollBar.getClass().getDeclaredMethod("setVerticalThumbDrawable", Drawable.class);
    method.setAccessible(true);
    method.invoke(scrollBar, getResources().getDrawable(R.drawable.scrollbar_style));
}
catch(Exception e)
{
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

上面的代码执行如下:

listview.mScrollCache.scrollBar.setVerticalThumbDrawable(getResources().getDrawable(R.drawable.scrollbar_style));
Run Code Online (Sandbox Code Playgroud)


Mar*_*tyn 2

我不知道这个问题的答案,但经过一番挖掘后,我认为这不可能没有麻烦。

这个 xml 属性实际上与 a 相关联View,而不是 a ListView- 在 Android View 源代码中,似乎设置垂直拇指可绘制的唯一位置是“initializeScrollbars”方法。现在这个方法不是私有的,所以我们可以扩展 View 的任何子级并重写这个方法,但问题是设置拇指可绘制所需的关键组件 ScrollabilityCache 是私有的,没有任何 getter 方法。

因此,如果不重写大量代码,我认为没有任何简单的方法可以做到这一点 - 抱歉!