老设备上如何实现 Holo 快速滚动效果

8

关于我的应用

我有一个使用Holo主题的应用。

对于早期的设备,我只是回溯了一些Holo主题的元素。

对于CheckBox、RadioButton等工作主题、样式和属性都可以正常使用。

我的目标

我使用ListView来显示大量项目。我想在我的ListView上启用快速滚动,并希望它具有Holo外观。

我的问题

我在将快速滚动Drawable集成到我的应用程序主题中时遇到了一些困难。

我已经尝试过的方法

  1. 寻找可以完成此任务的库。 HoloEverywhere很有希望,但没有处理该问题。

  2. 尝试自己实现:

我只需添加这些可绘制对象:

enter image description here enter image description here

然后还添加了此可绘制对象:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/fastscroll_thumb_pressed_holo" />
    <item android:drawable="@drawable/fastscroll_thumb_default_holo" />
</selector>

在我的attrs.xml中新增了以下内容:
<attr name="fastScrollThumbDrawable" format="reference" />

我在我的themes.xml文件中添加了以下内容:

<style name="MyTheme">
    <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_holo</item>
</style>

这个主题已经在我的应用程序的Manifest.xml文件中正确设置:
android:theme="@style/MyTheme"

请记住,android:fastScrollThumbDrawable在honeycomb之前是不存在的。
我希望你能帮我解决这个问题。 :) 更新: 看起来快速滚动支持已经添加到了HoloEverywhere中,几个小时前:

https://github.com/ChristopheVersieux/HoloEverywhere/commit/34561e48339bf6a3e0307d2d35fc4c5ac8409310

我会去查看一下。 :)

HoloEverywhere 解决了你的问题吗? - apenasVB
我没有尝试在我的应用程序中集成HoloEverywhere,但如果所有者接受了拉取请求,那么它肯定可以工作。我看了一下他们是如何做的,看起来很复杂。对我来说太难将其集成到我的应用程序中了。 - Timothée Jeannin
2个回答

1
我正在使用 android:fastScrollThumbDrawable,但不知道为什么它不起作用,于是在网上搜索时,我发现 这里 有一个硬编码的解决方案,我不知道它是否适用于像您所需的旧 API,但在我的情况下,问题得到了解决。请注意,我将目标设为 API 18,并使用 API 17 的设备进行测试。

代码如下:

try {
    Field f = AbsListView.class.getDeclaredField("mFastScroller");
    f.setAccessible(true);
    Object o = f.get(<<your listView here>>);
    f = f.getType().getDeclaredField("mThumbDrawable");
    f.setAccessible(true);
    Drawable drawable = (Drawable) f.get(o);
    drawable = getResources().getDrawable(R.drawable.<<your thumb drawable here can be a selector>>);
    f.set(o, drawable);
} catch (Exception e) {
    e.printStackTrace();
}

0

将此更改为:

<style name="MyTheme">
    <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_holo</item>
</style>

转换成这样,似乎你忘记了一个属性:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="listviewfastscrollstyle" parent="android:Theme">
    <item name="android:fastScrollTrackDrawable">@drawable/fastscroll_thumb_holo</item>
    <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_holo</item>
</style>

</resources>

现在应该可以工作了 :)

最好的祝福

safari


谢谢你的回答。但是这个方法不起作用。请记住,android:fastScrollTrackDrawable在Honeycomb之前是不存在的。还有其他的想法吗? - Timothée Jeannin
哦,对不起,我忘了那个,你是正确的... 嗯,我会考虑一些新的东西。 - safari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接