Android ListView fastScrollThumbDrawable无法正常工作

时间:2012-02-19 10:04:57

标签: android listview fastscroll

我正在做一个应用程序,我希望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

拇指图像需要采用特定格式还是大小? 它是否可以改为自定义图形,如果不能改变,拇指的颜色至少可以改变?

任何帮助将不胜感激

5 个答案:

答案 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及更高版本。

http://developer.android.com/reference/android/R.attr.html

答案 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)

要更改fastScrollThumbDrawablefastScrollTrackDrawable或快速滚动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" />