2013-06-27 5 views
11

Я хочу настроить список с помощью удобной быстрой полосы прокрутки, такой как приложение для воспроизведения музыки Google, с вертикальной линией с изображением большого пальца. Он обеспечивает простой и быстрый способ прокрутки с помощью этой удобной быстрой полосы прокрутки. Я пробовал искать пользовательскую полосу прокрутки, как это, но я не мог найти ни одного с быстрой полосой прокрутки в списке. Я ожидаю выход скроллинга как на рисунке ниже:Custom Listview Fast Scrollbar в android

enter image description here

Быстрая полоса прокрутки снаружи отмечен красной линией. Я нашел this post на StackOverflow, но код в ссылке не дает мне ожидаемого результата. Можете ли вы помочь мне сделать это?

+0

может у поста ур код? – KOTIOS

ответ

36

Наконец-то я придумал решение. Она работает только с уровня API 11 или более высокие значения

/style.xml

<style name="AppTheme" parent="@style/Theme.Sherlock.Light"> 
     <!-- All customizations that are NOT specific to a particular API-level can go here. --> 
     <item name="android:fastScrollThumbDrawable">@drawable/fast_thumb</item> 
     <item name="android:fastScrollTrackDrawable">@drawable/fastscroll_track_default_holo_dark</item> 

</style> 

Нанести активность на эту тему, как показано ниже код:

  <activity 
      android:name="com.example.viewpager.FirstActivity" 
      android:theme="@style/AppTheme" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

активность макета XML, как показано ниже код:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rlScrollingPlayList" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:orientation="vertical" > 

     <ListView 
      android:id="@+id/listView1" 
      android:layout_width="match_parent" 
      android:fastScrollEnabled="true" 
      android:fastScrollAlwaysVisible="true" 
      android:scrollbarStyle="outsideInset" 
      android:layout_height="match_parent" > 
     </ListView> 

</RelativeLayout> 

ресурсов файлы изображений являются

enter image description hereenter image description hereenter here

Быстрая прокрутка Селектор пальца XML-файл:

вытяжке/fast_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_thumb_pressed_holo"/> 
    <item android:drawable="@drawable/fastscroll_thumb_default_holo"></item> 

</selector> 

Конечный результат, как показано на рисунке ниже:

enter image description here

+0

В случае, если кому-то понадобится удалить FastScrollTrackDrawable >> @ null Eftekhari

+0

хороший ответ, однако селектор не работает в моем случае. –

2

так для андроида уровня апи < 11 есть специальный хак

// special hack for violet fast scroll 
     if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { 
      try { 
       java.lang.reflect.Field f = AbsListView.class.getDeclaredField("mFastScroller"); 
       f.setAccessible(true); 
       Object o = f.get(root.findViewById(R.id.beam_contact_listview)); 
       f = f.getType().getDeclaredField("mThumbDrawable"); 
       f.setAccessible(true); 
       Drawable drawable = (Drawable) f.get(o); 
       drawable = getResources().getDrawable(R.drawable.sv_fastscroll); 
       f.set(o, drawable); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

этот код плюс решения для андроида уровня ИЗЫ> = 11 = решение для всех андроид уровней API)