2012-02-19 4 views
2

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

<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.

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

любая помощь будет оценена

ответ

0

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

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

+0

Mine до сих пор ничего не делает в ICS , Мне пришлось применить тему к моему приложению, чтобы получить ее пользовательские быстрые скроллеры. – sgarman

+1

@sgarman, не могли бы вы объяснить (как, может быть, ответ?), Что вы имеете в виду, применив тему к вашему приложению, чтобы получить пользовательские быстрые слайды? – Rick

2

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

android:fastScrollEnabled="true" 

или в коде

listView.setFastScrollEnabled(true); 

Создать файл 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" 
    ...> 

Создать папку значения в папке Рез. Создание themes.xml файлов в рес/значений следующим образом:

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

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

+0

Мне нравятся ваши четкие объяснения. Я не понимаю, почему мне нужно установить андроид: тему в AndroidManifest вместо другого файла макета в элементе LinearLayout. –

+0

В версии андроида, для которой это было написано, единственный способ изменить миниатюру быстрого прокрутки - установить ее по всему приложению с помощью темы приложения. Возможно, можно установить его на LinearLayout в более актуальной версии Android, но мне придется проверить это и вернуться к вам. – JeffG

0

Я использую , но я не знаю, почему он не работает, поэтому поиск в Интернете я нашел 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(); 
} 
0

Для того, чтобы изменить fastScrollThumbDrawable, то fastScrollTrackDrawable или цвет текст FastScroll 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"/> 
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: (или там, где ваша точка зрения является то, что вы хотите применить это к & дают возможность быстрой прокрутки) Добавить этот атрибут объявления:

<ListView android:fastScrollEnabled="true" />