我有一个具有全息外观的应用程序。
对于蜂窝前装置,我只是向后推出了Holo主题的一些元素。
CheckBox,RadioButton ......
可以使用主题,样式和attrs我使用ListView来显示很多项目。我想在我的ListView上启用快速滚动,我希望它具有全息效果。
我在将快速滚动Drawable集成到我的应用主题中时遇到了一些困难。
寻找执行此操作的库。 HoloEverywhere 有希望,但没有处理。
我自己试图这样做:
我刚刚添加了那些drawables:
然后还添加了这个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
我会检查出来的。 :)
答案 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>
现在它应该工作:)
最好的问候
狩猎