ListView自定义快速滑块 FastScroll兼容高版本

<p><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">给ListView设置快速滑块</span></p>

在布局给ListView设置快速滑块文件中加上

android:fastScrollEnabled="true"
或者在代码中设置

listView.setFastScrollEnabled(true);

自定义ListView的快速滑块,在Manifest文件中,为你ListView所在Activity设置主题

主题中添加如下item,item值就是你滚动条Drawable

    <style name="Theme.Sliding.Scrollbar" parent="Theme.Sliding">
        <item name="android:fastScrollThumbDrawable">@drawable/catalog_fast_scroll_bar</item>
    </style>
好了,我们来运行一下看看效果


下图,4.0的系统,中间灰色条是我自定义的快速滑块(切图就是这样)

换个手机再看看,下图是6.0.1的系统的效果


横向被拉伸了,胖了好多


原因是在API21以后系统对拖动滑块进行了修改,通过下面代码对API21以上系统对自定义滑块进行设置

        if (android.os.Build.VERSION.SDK_INT >= 21) {
            try {
                Field mFastScroll = AbsListView.class.getDeclaredField("mFastScroll");
                mFastScroll.setAccessible(true);
                Object fastScroller = mFastScroll.get(listView);
                Field mThumbImage = fastScroller.getClass().getDeclaredField("mThumbImage");
                mThumbImage.setAccessible(true);
                ImageView imageView = (ImageView) mThumbImage.get(fastScroller);
                imageView.setImageDrawable(getResources().getDrawable(R.drawable.catalog_fast_scroll_bar));
                imageView.setMinimumWidth(Utils.dipDimensionInteger(30));
                imageView.setMinimumHeight(Utils.dipDimensionInteger(80));
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }

上面的操作就是通过反射找到listView对象中快速滑块ImageView对象

把新的滑块的Drawable设置给此ImageView对象,设置ImageView对象切图大小的固定宽高,记住一定要是固定宽高,

否则不起效果,之后运行各版本上的效果就一致了。


发布了12 篇原创文章 · 获赞 0 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览