【转】自定义ListView FastScroller滑块图片

Android ListView 快速滚动滑块自定义全解析:从反射实现到官方兼容方案 本文探讨了Android开发中ListView快速滚动滑块的自定义实现方法。首先分析了默认滑块仅在长列表显示的局限性,提出通过自定义增强视觉一致性。重点对比了两种方案:早期使用反射修改mThumbDrawable(仅适用于API18及以下),以及推荐使用Android5.0+官方样式属性安全定制。文章详细介绍了XML样式定义、主题配置方法,并强调多版本兼容测试的重要性。最后建议开发者优先采用官方方案,在保证稳定性的同时优化用户体验,避免过度定制影响可用性。 阅读详情
 

自定义ListView FastScroller滑块图片

使用ListView FastScroller,默认滑块和自定义滑块图片的样子:

imageimage

设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可:

<ListView android:id="@+id/listView" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"android:fastScrollEnabled="true" 
    android:focusable="true"
 />

但是有时候会发现设置属性无效,滚动ListView并未出现滑块。原因是该属性生效有最小记录限制。当ListView记录能够在4屏以内显示(也就是说滚动4页)就不会出现滑块。可能是api设计者认为这么少的记录不需要快速滚动。

我的依据是android源代码,见FastScroller的常量声明:

// Minimum number of pages to justify showing a fast scroll thumb 
   private static int MIN_PAGES = 4;

以及:

// Are there enough pages to require fast scroll? Recompute only if total count changes 
        if (mItemCount != totalItemCount && visibleItemCount > 0) { 
            mItemCount = totalItemCount; 
            mLongList = mItemCount / visibleItemCount >= MIN_PAGES;
}

通篇查看了ListView及其超累AbsListView,都未找到自定义图片的设置接口。看来是没打算让开发者更改了。但是用户要求我们自定义这个图片。那只能用非常手段了。

经过分析发现,该图片是ListView超类AbsListView的一个成员mFastScroller对象的成员mThumbDrawable。这里mThumbDrawable是Drawable类型的。mFastScroller是FastScroller类型,这个类型比较麻烦,类的声明没有modifier,也就是default(package),只能供包内的类调用。

因此反射代码写的稍微麻烦一些:

try { 
    Field f = AbsListView.class.getDeclaredField("mFastScroller"); 
    f.setAccessible(true); 
    Object o=f.get(listView); 
    f=f.getType().getDeclaredField("mThumbDrawable"); 
    f.setAccessible(true); 
    Drawable drawable=(Drawable) f.get(o); 
    drawable=getResources().getDrawable(R.drawable.icon); 
    f.set(o,drawable); 
    Toast.makeText(this, f.getType().getName(), 1000).show(); 
} catch (Exception e) { 
    throw new RuntimeException(e); 
}

这样就可以改变默认的滑块图片了。



属性名称 描述
android:background 设置背景色/背景图片。可以通过以下两种方法设置背景为透明:”@android:color/transparent”和”@null”。注意TextView默认是透明的,不用写此属性,但是Buttom/ImageButton/ImageView想透明的话就得写这个属性了。
android:clickable 是否响应点击事件。
android:contentDescription 设置View的备注说明,作为一种辅助功能提供,为一些没有文字描述的View提供说明,如ImageButton。这里在界面上不会有效果,自己在程序中控制,可临时放一点字符串数据。
android:drawingCacheQuality 设置绘图时半透明质量。有以下值可设置:auto(默认,由框架决定)/high(高质量,使用较高的颜色深度,消耗更多的内存)/low(低质量,使用较低的颜色深度,但是用更少的内存)。
android:duplicateParentState 如果设置此属性,将直接从父容器中获取绘图状态(光标,按下等)。 见下面代码部分,注意根据目前测试情况仅仅是获取绘图状态,而没有获取事件,也就是你点一下LinearLayout时Button有被点击的效果,但是不执行点击事件。
android:fadingEdge 设置拉滚动条时 ,边框渐变的放向。none(边框颜色不变),horizontal(水平方向颜色变淡),vertical(垂直方向颜色变淡)。参照fadingEdgeLength的效果图
android:fadingEdgeLength 设置 边框渐变的长度。
android:fitsSystemWindows 设置布局调整时是否考虑系统窗口(如状态栏)
android:focusable 设置是否获得焦点。若有requestFocus()被调用时,后者优先处理。注意在表单中想设置某一个如EditText获取焦点,光设置这个是不行的,需要将这个EditText前面的focusable都设置为false才行。在Touch模式下获取焦点需要设置focusableInTouchMode为true。
android:focusableInTouchMode 设置在Touch模式下View是否能取得焦点。
android:hapticFeedbackEnabled 设置长按时是否接受其他触摸反馈事件。这里模拟器没有试出效果,难道是多点触摸?找不到资料可以找找performHapticFeedback或HapticFeedback这个关键字的资料看看。
android:id 给当前View设置一个在当前layout.xml中的唯一编号,可以通过调用View.findViewById() 或Activity.findViewById()根据这个编号查找到对应的View。不同的layout.xml之间定义相同的id不会冲突。格式如”@+id/btnName”
android:isScrollContainer 设置当前View为滚动容器。这里没有测试出效果来,ListView/ GridView/ ScrollView根本就不用设置这个属性,而EdidText设置android:scrollbars也能出滚动条。
android:keepScreenOn View在可见的情况下是否保持唤醒状态。

 

常在LinearLayout使用该属性,但是模拟器这里没有效果。

android:longClickable 设置是否响应长按事件.
android:minHeight 设置视图最小高度
android:minWidth 设置视图最小宽度度
android:nextFocusDown 设置下方指定视图获得下一个焦点。焦点移动是基于一个在给定方向查找最近邻居的算法。如果指定视图不存在,移动焦点时将报运行时错误。可以设置imeOptions= actionDone,这样输入完即跳到下一个焦点。
android:nextFocusLeft 设置左边指定视图获得下一个焦点。
android:nextFocusRight 设置右边指定视图获得下一个焦点。
android:nextFocusUp 设置上方指定视图获得下一个焦点。
android:onClick 点击时从上下文中调用指定的方法。这里指定一个方法名称,一般在Activity定义符合如下参数和返回值的函数并将方法名字符串指定为该值即可:

 

public void onClickButton(View view)

android:onClick=” onClickButton”

android:padding 设置上下左右的边距,以像素为单位填充空白。
android:paddingBottom 设置底部的边距,以像素为单位填充空白。
android:paddingLeft 设置左边的边距,以像素为单位填充空白。
android:paddingRight 设置右边的边距,以像素为单位填充空白。.
android:paddingTop 设置上方的边距,以像素为单位填充空白。
android:saveEnabled 设置是否在窗口冻结时(如旋转屏幕)保存View的数据,默认为true,但是前提是你需要设置id才能自动保存,参见这里。
android:scrollX 以像素为单位设置水平方向滚动的的偏移值,在GridView中可看的这个效果。
android:scrollY 以像素为单位设置垂直方向滚动的的偏移值
android:scrollbarAlwaysDrawHorizontalTrack 设置是否始终显示垂直滚动条。这里用ScrollView、ListView测试均没有效果。
android:scrollbarAlwaysDrawVerticalTrack 设置是否始终显示垂直滚动条。这里用ScrollView、ListView测试均没有效果。
android:scrollbarDefaultDelayBeforeFade 设置N毫秒后开始淡化,以毫秒为单位。
android:scrollbarFadeDuration 设置滚动条淡出效果(从有到慢慢的变淡直至消失)时间,以毫秒为单位。Android2.2中滚动条滚动完之后会消失,再滚动又会出来,在1.5、1.6版本里面会一直显示着。
android:scrollbarSize 设置滚动条的宽度。
android:scrollbarStyle 设置滚动条的风格和位置。设置值:insideOverlay、insideInset、outsideOverlay、outsideInset。这里没有试出太多效果,以下依次是outsideOverlay与outsideInset效果截图比较:
android:scrollbarThumbHorizontal 设置水平滚动条的drawable(如颜色)。
android:scrollbarThumbVertical 设置垂直滚动条的drawable(如颜色).
android:scrollbarTrackHorizontal 设置水平滚动条背景(轨迹)的色drawable(如颜色)
android:scrollbarTrackVertical
 设置垂直滚动条背景(轨迹)的drawable注意直接设置颜色值如”android:color/white”将得出很难看的效果,甚至都不理解这个属性了,这里可以参见ApiDemos里res/drawable/ scrollbar_vertical_thumb.xml和scrollbar_vertical_track.xml,设置代码为:android:scrollbarTrackVertical ="@drawable/scrollbar_vertical_track"
android:scrollbars 设置滚动条显示。none(隐藏),horizontal(水平),vertical(垂直)。见下列代码演示使用该属性让EditText内有滚动条。但是其他容器如LinearLayout设置了但是没有效果。
android:soundEffectsEnabled 设置点击或触摸时是否有声音效果
android:tag 设置一个文本标签。可以通过View.getTag()或 for with View.findViewWithTag()检索含有该标签字符串的View。但一般最好通过ID来查询View,因为它的速度更快,并且允许编译时类型检查。
android:visibility 设置是否显示View。设置值:visible(默认值
RecyclerView-FastScroller:完全可自定义的Android RecyclerView快速滚动器,用Kotlin编写 立即下载

相关推荐

Android-一个类似ListView的FastScroller但用于Android的RecyclerView.

一个类似ListView的FastScroller但用于Android的RecyclerView.

RecyclerView-FastScroller

RecyclerView-FastScroller 项目地址:quiph/RecyclerView-FastScroller  简介:A fully customizable Fast Scroller for the RecyclerView in Android, written in Kotlin and 100% compatible with Java only projects ...

未来很长,但我会努力的走下去。 1148

Android代码-适用于Android中RecyclerView的完全可自定义的Fast Scroller

RecyclerViewFastScroller A simple, easy to use and configurable fast scroller for RecyclerView Adding the dependency implementation 'com.quiph.ui:recyclerviewfastscroller:0.1.1-alpha' Java-only project? As Kotlin compiles to Java, there's no need to externally add the Kotlin runtime or any other Kotlin dependencies when using this. Also the library is 100% compatible with Java and requires no migration of the base project to Kotlin. Usage: The base layout type for this fast scroller is

自定义RecyclerView支持快速滚动

通过自定义RecyclerView来实现滚动条的长度不会因为item的增多而发生长度变化。

CHNE_TAO_EMSM的博客 1300

FastScroll:适用于Android RecyclerView的类似ListView的FastScroller

快速滚动 类似于ListView的FastScroller,用于Android的RecyclerView。 FastScroll通过Lollipop样式的滚动条和节“气泡”视图将Android的ListView流行的快速滚动和节索引功能引入RecyclerView。 滚动条提供了一个控件,用于在气泡视图显示当前可见的节索引时快速浏览列表。 FastScroll受此启发。 下载 Gradle: dependencies { implementation ' com.l4digital.fastscroll:fastscroll:2.0.1 ' } Maven: < dependency> < groupId>com.l4digital.fastscroll</ groupId> < artifactId>fastscroll</ artifactId>

Flutter 中使用蓝牙插件报错,说没有权限怎么解决

2、在build.grale里面更改一下版本号,我修改的是targetSdkVersion这个版本号,需要根据你自己的版本进行更改,记得更改之后先flutter clean一下再run。搞了一晚上,没搞出来,第二天用同事手机测试发现他手机可以,我手机还是不行,才发现是Android版本问题,需要修改两处地方。废话不多说,咱先看报错信息。

zzj17637822814的博客 2288

推荐开源项目:RecyclerView-FastScroller - 打造流畅的Android滚动体验

在Android应用开发中,`RecyclerView`是最常用的组件之一,用于展示大量数据集合。然而,对于长列表的浏览,快速定位目标位置往往是一个挑战。为了解决这个问题, 上开源了一个名为 `RecyclerView-FastScroller` 的库,它允许用户通过一个浮动的手柄轻松、快捷地滚动长列表。 ## 项目简介 `RecyclerView-FastScroller` 是一个轻量级的A...

gitblog_00006的博客 495

odoo19/18集成reportbro 打印插件 完美支持静默打印

ReportBro设计器 一个用于创建PDF和XLSX报告模板的javascript插件。ReportBro Designer可以轻松集成到您的Web应用程序中。每个人都可以设计和编辑文档模板,并直接在浏览器中预览它们。可以使用服务器上的 (有关完整的文档和演示,请参阅上的ReportBro项目网站。reportBro官方没有提供。测试环境:odoo17社区版。2.产品标签打印设计。

zxltwins的博客 2772

RecyclerView 的 FastScroller 绘制的源码分析

RecyclerView 以前一直被人诟病没有 FastScroller 的功能,然后网上出现了几种解决方法 继承 RecyclerView,重写 draw() 方法,绘制 FastScroller 单独自定义一个 View,然后传入 RecyclerView 作为参数。 第一种方法沿用了 ListView 的思维,把 FastScroller 和 RecyclerView 绘制在一起,耦合度过高,

不惜留恋_ 3780

VECTOR硬件VN1600系列对比:VN1610、VN1611、VN1630A、VN1640A、VN1630log、VN1670

VN16系列说不清道不明的区别和关系

AmorRun的博客 2万+

vue2/3 - 【超详细】最新网站接入使用支付宝支付功能,点击支付跳转新页面后生成订单及支付二维码,实现支付宝在线付款详细的教程(整个支付的完整配置及支付流程,一键复制源码开箱即用)!

vue支付宝付款,vue支付宝支付,vue如何实现支付宝在线付款,vue网页pc项目接入支付宝支付,vue支付宝支付详细教程,vue2支付宝在线支付的详细示例代码,vue如何做支付宝付款,vue怎么实现支付宝的付款功能,vue调用支付宝进行付款支付,vue PC项目实现 支付宝支付,vue h5页面调用支付宝支付,vue页面唤起支付宝支付功能,vue支付宝支付跳转到新页面,vue如何跳转新开一页展示支付宝二维码支付,vue怎么新开页面进行支付宝在线支付,vue新页面支付宝支付功能,前端vue支付宝支付教程,

✅ 精选推荐文章 5729

AndroidFastScroll 使用指南

--- ## 项目介绍 AndroidFastScroll 是由开发者张海创建的一个开源库,旨在简化 Android 应用程序中 RecyclerView 快速滚动功能的实现。它提供了高度可定制化的滑块,使得长列表的数据浏览变得更加便捷高效。通过集成这个轻量级的库,开发者可以快速为其应用中的列表视图添加类似于系统联系人应用那样的快速定位功能,提升用户体验。 --- ## 项目快速启动 要

gitblog_00099的博客 978

二维矩形件排样算法之最低水平线算法实现

最低水平线算法的简单实现(Python) 1、二维矩形排样算法众多,最早的有BL算法、下台阶算法、最低水平线算法等,其中最低水平线算法及其优化算法应用较多,是与智能优化算法(遗传算法、模拟退火算法等)结合的最多的算法,本文利用python对最低水平线算法做了实现...

峰爸的博客 1万+

转:自定义ListView FastScroller滑块图片

// Are there enough pages to require fast scroll? Recompute only if total count changes if (mItemCount != totalItemCount && visibleItemCount > 0) { mItemCount...

weixin_34241036的博客 95

三菱MC协议(MC/TCP):避坑指南|C#实现三菱MC协议:软元件(X/Y/M/D)读写与帧格式解析

核心避坑逻辑:MC协议的坑80%集中在“PLC配置”“地址编码”“字节序”,先解决这三点,通信就成功了一半;实战优先级:新手优先用开源库(Mitsubishi.MCProtocol),避免手动拼接帧格式的复杂坑;进阶再研究帧格式解析;排坑技巧:先Ping通→用调试助手验证→写C#代码,分层排查,不要混在一起找问题。掌握这些避坑技巧后,你可以轻松实现C#与三菱全系列PLC的稳定通信,满足工业场景中数据采集、设备控制等核心需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2190

Python爬虫实战:采集菜谱网站数据——以“下厨房”为例

随着互联网的发展,海量优质数据为各类应用提供了坚实基础。菜谱作为用户日常生活中需求极高的内容,丰富多样的菜谱数据不仅方便用户烹饪,也为美食推荐、营养分析等研究提供了数据支持。本文将围绕国内知名菜谱网站“下厨房”(https://www.xiachufang.com)展开,结合最新Python爬虫技术,详细讲解如何高效、规范地采集菜谱数据,包括菜谱名称、食材、步骤、评分、评论等丰富信息。全篇覆盖爬虫原理、框架选型、反爬应对、数据存储和简单分析,是学习爬虫实战的绝佳案例。菜谱标题作者信息菜谱图片。

2201_76125261的博客 1897

自定义ListView FastScroller滑块图片

推荐安卓开发神器(里面有各种UI特效和android代码库实例) 使用ListView FastScroller,默认滑块和自定义滑块图片的样子: 设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可: &lt;ListView android:id="@+id/listView" android:layout_width="fill_parent"     android...

xSTARx 211

GPS天线结构、原理、测试

【有源陶瓷天线构成】GPS天线是由接收天线和前置放大器两个部件组成。GPS接收天线的作用,是将卫星来的无线电信号的电磁波能量变换成接收机电子器件可摄取应用的电流。绝大部分内置GPS天线为右旋极化陶瓷介质,其组成部分为:陶瓷天线、低噪音信号模块、线缆、[接头](h

数字世界 万物互联 2万+

Android常见问题分析之自定义ListView FastScroller滑块图片 以及 android:fastScrollEnabled="true" 不起作用

使用ListView FastScroller,默认滑块和自定义滑块图片的样子: 设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可:     android:layout_height="fill_parent" android:fastScrollEnabled="true"      android:focusable="true" /> 但是有

小吕丶Code阶区 3048

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

自定义ListView FastScroller滑块图片 以及 android:fastScrollEnabled="true" 不起作用

使用ListView FastScroller,默认滑块和自定义滑块图片的样子: 设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可:     android:layout_height="fill_parent" android:fastScrollEnabled="true"     android:focusable="true" /> 但是有时候会发现设

善感的人 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android-自定义ListView FastScroller滑块图片

<br />http://disanji.net/2011/01/17/custom-listview-fastscroller-picture/#

yangtaoJ2me的专栏 1204

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

自定义ListView FastScroller滑块图片 以及 android:fastScrollEnabled="true" 不起作用

使用ListView FastScroller,默认滑块和自定义滑块图片的样子:设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可:<ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" and...

weixin_34174322的博客 111
上一篇: 新浪微博布局学习——活用RelativeLayout
下一篇: Android学习笔记之mainfest文件中android属性
pointerfree
博客等级 码龄18年 26粉丝 28原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值