Android 自定义滚动条和 fastScrollEnabled

Android Custom Scrollbar and fastScrollEnabled

我只想在我的 Listview 中使用 fastScrollEnabled 自定义滚动条,但这不起作用! 启用 fastScroll 后,自定义滚动条在正常滚动时不可见,而在快速滚动时,它是默认滚动条。 没有 fastScrollEnabled 确实可以正常工作。


res\values\Styles.xlm:

<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="android:scrollbarThumbVertical">@drawable/scrollbar</item>
    <item name="android:fastScrollThumbDrawable">@drawable/scrollbar</item>
    <item name="android:fastScrollTrackDrawable">@drawable/scrollbar</item>
</style>
...

res\drawable\scrollbar.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<gradient
    android:angle="45"
    android:endColor="#CC3401"
    android:centerColor="#CC5c33"
    android:startColor="#CC3401" />

<corners android:radius="8dp" />
<size android:width="4dp"/>
<padding
    android:left="0.5dp"
    android:right="0.5dp" />
</shape>

AndroidManifest.xml:

    <application
    android:theme="@style/AppTheme"

我的列表视图:

 <ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff000020"
    android:clickable="false"
    android:fastScrollEnabled="true">
</ListView>

谁能告诉我这里出了什么问题? 谢谢!


更新

简短的回答是:"thumb"和"track"是不同的东西,不要放相同的样式。当您使用 "fastScrollbarEnabled" 区域时,"track" 需要有高度和宽度。


下面是旧答案

显然您需要在启用 "fastScrollEnabled" 时指定 "thumb" 高度。你把同一个 drawable 放到 "thumb" 和 "track",是你的意图吗?

查看我的代码:

style.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

        <item name="android:fastScrollTrackDrawable">@drawable/fast_scrollbar_track</item>
        <item name="android:fastScrollThumbDrawable">@drawable/fast_scrollbar</item>

        <item name="android:scrollbarTrackVertical">@drawable/scrollbar_track</item>
        <item name="android:scrollbarThumbVertical">@drawable/scrollbar</item>
    </style>

</resources>

fast_scrollbar.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:angle="45"
        android:endColor="#ff00ff00"
        android:centerColor="#ff00ff00"
        android:startColor="#ff00ff00" />

    <corners android:radius="8dp" />
    <size android:width="4dp" android:height="50dp"/>
    <padding
        android:left="0.5dp"
        android:right="0.5dp" />
</shape>

fast_scrollbar_track.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:angle="45"
        android:endColor="#ffff0000"
        android:centerColor="#ffff0000"
        android:startColor="#ffff0000" />

    <corners android:radius="8dp" />
    <size android:width="4dp" android:height="50dp"/>
    <padding
        android:left="0.5dp"
        android:right="0.5dp" />
</shape>

scrollbar.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:angle="45"
        android:endColor="#ff00ff00"
        android:centerColor="#ff00ff00"
        android:startColor="#ff00ff00" />

    <corners android:radius="8dp" />
    <size android:width="4dp"/>
    <padding
        android:left="0.5dp"
        android:right="0.5dp" />
</shape>

scrollbar_track.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <gradient
        android:angle="45"
        android:endColor="#ffff0000"
        android:centerColor="#ffff0000"
        android:startColor="#ffff0000" />

    <corners android:radius="8dp" />
    <size android:width="4dp"/>
    <padding
        android:left="0.5dp"
        android:right="0.5dp" />
</shape>

我的设备打印件:

现在,我知道为什么我不能快速滚动了。我使用 Viewpager 作为我的 Listview 的父级,滚动条位置在屏幕的最右边。我需要将滚动条位置设置得更靠左一点才能正确触摸滚动条以实现快速滚动:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:right="20dp"> <!-- Margin -->
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <gradient
                android:angle="45"
                android:centerColor="#CC6000"
                android:endColor="#CC5000"
                android:startColor="#CC5000"/>

            <corners android:radius="8dp"/>
            <size
                android:width="6dp"
                android:height="30dp"/>
        </shape>
    </item>
</layer-list>

再次感谢您的帮助,路易斯!