2

我正在做一个应用程序,我希望我的列表视图上的快速滚动选项卡成为自定义拇指选项卡。在线阅读文档我认为这样做可以:

<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"
/>

列表视图很好,自定义滚动条颜色正常工作,并且显示了 fastscrollbar 选项卡,但它使用的是默认拇指图像而不是png文件scrollbar_thumb

拇指图像是否需要采用某种格式或大小?可以将其更改为自定义图形,如果不能,至少可以更改拇指的颜色吗?

任何帮助都感激不尽

4

5 回答 5

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 中创建 theme.xml 文件,如下所示:

<resources>
    <style name="ApplicationTheme">
        <item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb</item>
    </style>
</resources>

最后确保您的可绘制文件夹中存在 fastscroll.png 和 fastscroll_pressed.png

于 2013-07-04T11:31:45.693 回答
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"/>
于 2014-03-05T22:24:49.600 回答
0

请注意,该android:fastScrollThumbDrawable属性仅适用于 Android API 级别 11 及更高版本。

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

于 2012-04-22T06:59:38.797 回答
0

我测试了以前的答案,并提出了这个简化版本,其中包含用于快速滚动的自定义拇指图标的最低要求:

Android 清单:(应用程序标签)

android:theme="@style/ApplicationTheme"

res/values/themes.xml:

<resources>
  <style name="ApplicationTheme">
    <item name="android:fastScrollThumbDrawable">@drawable/scrollbar</item>
  </style>
</resources>

layout\activity_main.xml:(或任何您想要应用此视图并启用快速滚动的视图)添加此属性:

<ListView android:fastScrollEnabled="true" />

于 2015-01-15T20:26:06.813 回答
0

我正在使用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();
}
于 2013-08-21T07:58:08.137 回答