Holo快速滚动看旧设备上

时间:2012-12-26 14:55:51

标签: android android-layout android-theme android-holo-everywhere fastscroll

关于我的应用

我有一个具有全息外观的应用程序。

对于蜂窝前装置,我只是向后推出了Holo主题的一些元素。

CheckBox,RadioButton ......

可以使用主题,样式和attrs

我正在尝试做什么

我使用ListView来显示很多项目。我想在我的ListView上启用快速滚动,我希望它具有全息效果。

我的问题

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

到目前为止我尝试了什么

  1. 寻找执行此操作的库。 HoloEverywhere 有希望,但没有处理。

  2. 我自己试图这样做:

  3. 我刚刚添加了那些drawables:

    enter image description here enter image description here

    然后还添加了这个drawable:

    <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 doesn't exist pre-honeycomb


    我希望你能帮助我解决这个问题。 :)

    更新:

    几小时前,HoloEverywhere似乎添加了快速滚动支持:

      

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

    我会检查出来的。 :)

2 个答案:

答案 0 :(得分:1)

我正在使用android:fastScrollThumbDrawable,但我不知道为什么它不起作用,所以在网上搜索我发现here一个硬代码解决方案,我不知道它是否适用于旧的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();
}

答案 1 :(得分: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>

现在它应该工作:)

最好的问候

狩猎