Android ListView fastScrollThumbDrawable не работает - PullRequest
2 голосов
/ 19 февраля 2012

Я делаю приложение, в котором я хочу, чтобы вкладка быстрой прокрутки в моем списке была настраиваемой вкладкой большого пальца.читая документы в интернете, я подумал, что это сработает:

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

Вид списка в порядке, пользовательские цвета полосы прокрутки работают и отображается вкладка панели быстрого доступа, но она использует изображение большого пальца по умолчанию, а не1004 * png file scrollbar_thumb .

нужно ли изображение большого пальца иметь определенный формат или размер?можно ли изменить его на пользовательский рисунок, если нет, то по крайней мере можно изменить цвет большого пальца?

любая помощь будет высоко ценится

Ответы [ 5 ]

2 голосов
/ 04 июля 2013

В определении XML ListView добавьте

android:fastScrollEnabled="true"

или в коде

listView.setFastScrollEnabled(true);

Создайте файл fastscroll_thumb.xml в папке res / drawable следующим образом:

<?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. Создайте файлы themes.xml в res / values ​​следующим образом:

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

Наконец убедитесь, что fastscroll.png и fastscroll_pressed.png существуют в вашей папке для рисования

0 голосов
/ 15 января 2015

Я проверил предыдущие ответы и придумал упрощенную версию с минимальными требованиями для пользовательского значка большого пальца для быстрой прокрутки:

Манифест Android: (тег приложения)

android:theme="@style/ApplicationTheme"

разреш / значения / themes.xml:

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

раскладка \ activity_main.xml: (или там, где, по вашему мнению, вы хотите применить это и включить быструю прокрутку) ДОБАВИТЬ этот атрибут:

<ListView android:fastScrollEnabled="true" />

0 голосов
/ 06 марта 2014

Чтобы изменить fastScrollThumbDrawable, fastScrollTrackDrawable или цвет текста fastscroll SectionIndexer, вы должны использовать контекстную тему. Другие ответы рекомендуют переопределить тему приложения через AndroidManifest, чтобы сделать это. Это работает, но если вы хотите, чтобы на 10000 * отображались разные полосы прокрутки, вы не сможете этого сделать. Кроме того, способ изменения цвета текста на 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"/>
0 голосов
/ 21 августа 2013

Я использую 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();
}
0 голосов
/ 22 апреля 2012

Обратите внимание, что атрибут android:fastScrollThumbDrawable применяется только для Android API уровня 11 и более поздних версий.

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

...