Пользовательская панель быстрого поиска Listview в Android

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

enter image description here

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

Ответы

Ответ 1

Наконец, я придумал решение. Он работает только с 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

Ответ 2

поэтому для уровня api для android, 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();
            }
        }

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