我正在做一个应用程序,我希望listview上的fastscroll选项卡是一个自定义的缩略图选项卡。在线阅读文档,我认为这样做:
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:cacheColorHint="@color/myWhite"
android:scrollbars="vertical"
android:scrollbarThumbVertical="@drawable/scrollthumb"
android:scrollbarSize="12dip"
android:fastScrollThumbDrawable="@drawable/scrollbar_thumb"
android:fastScrollEnabled="true"
/>
列表视图很好,自定义滚动条颜色正常,并且显示了快速滚动条选项卡,但它使用的是默认的拇指图像,而不是 png 文件 scrollbar_thumb 。
拇指图像需要采用特定格式还是大小? 它是否可以改为自定义图形,如果不能改变,拇指的颜色至少可以改变?
任何帮助将不胜感激
答案 0 :(得分:2)
在ListView XML定义中,添加
android:fastScrollEnabled="true"
或代码
listView.setFastScrollEnabled(true);
在res / drawable文件夹中创建文件fastscroll_thumb.xml,如下所示:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/fastscroll_pressed" />
<item android:drawable="@drawable/fastscroll" />
</selector>
在AndroidManifest.xml中,为您的应用程序设置自定义主题:
<application
android:theme="@style/ApplicationTheme"
...>
在res文件夹中创建一个values文件夹。在res / values中创建themes.xml文件,如下所示:
<resources>
<style name="ApplicationTheme">
<item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb</item>
</style>
</resources>
最后确保你的drawable文件夹中存在fastscroll.png和fastscroll_pressed.png
答案 1 :(得分:0)
请注意,android:fastScrollThumbDrawable
属性仅适用于Android API Level 11及更高版本。
答案 2 :(得分:0)
我正在使用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();
}
答案 3 :(得分:0)
要更改fastScrollThumbDrawable
,fastScrollTrackDrawable
或快速滚动SectionIndexer
的文本颜色,您必须使用上下文主题。其他答案建议通过AndroidManifest
覆盖应用程序的主题来执行此操作。这确实有效但如果你想要每ListView
个不同的滚动条外观,你就不能这样做。此外,更改SectionIndexer
上的文字颜色的方式不应在您的应用主题中完成,因为它可能会产生其他不良影响。
为快速滚动设置ListView
样式的最佳方法是创建使用ListView
的自定义ContextThemeWrapper
。
以下是一个例子:
public class FastscrollThemedListView extends ListView {
public FastscrollThemedListView(Context context, AttributeSet attrs) {
super(new ContextThemeWrapper(context, R.style.FastScrollTheme), attrs);
}
}
这就是你所需要的一切。你的风格如下:
<style name="FastScrollTheme">
<item name="android:textColorPrimary">?android:textColorPrimaryInverse</item>
<item name="android:fastScrollThumbDrawable">@drawable/fast_scrollbar_thumb</item>
<item name="android:fastScrollTrackDrawable">@drawable/fast_scrollbar_track</item>
</style>
textColorPrimary
如果您使用它,就会挂钩SectionIndexer
字体颜色。
您的ListView将如下所示:
<com.yourapp.view.FastscrollThemedListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:cacheColorHint="@color/myWhite"
android:scrollbars="vertical"
android:scrollbarSize="12dip"
android:fastScrollEnabled="true"/>
答案 4 :(得分:0)
我测试了之前的答案,并提出了这个简化版本,以及用于快速滚动的自定义拇指图标的最低要求:
Android Manifest :(应用程序代码)
android:theme="@style/ApplicationTheme"
RES /值/的themes.xml:
<resources>
<style name="ApplicationTheme">
<item name="android:fastScrollThumbDrawable">@drawable/scrollbar</item>
</style>
</resources>
布局\ activity_main.xml中: (或者您希望将其应用于&amp;启用快速滚动的任何地方) 添加此属性:
<ListView android:fastScrollEnabled="true" />