一、显示ListView快速滑动块图标
设想这样一个场景,当ListView的内容有大于100页的情况下,如果想滑动到第80页,用手指滑动到指定位置,无疑是一件很费时的事情,如果想快速滑动到指定的位置,只需加上ListView的fastScrollEnabled属性等于true,启用快速滑动功能即可。
1
2
3
4
5
|
<ListView
android:id=
"@android:id/list"
android:layout_width=
"match_parent"
android:layout_height=
"match_parent"
android:fastScrollEnabled=
"true"
/>
|
注意:默认只有当ListView的内容大于4页时,才会显示快速滑动块。想知道原因,查一下ListView源码中fastScrollEnabled这个属性是怎么被初始化的。
二、通过style自定义快速滑动块图标
通过反射,动态修改FastScroller对象的mThumbDrawable属性来改变快速滑动块的图标,这也不为于一种实现方式,但反射的效率较低。下面将介绍使用Style的方式来自定义图标。
从FastScroller类的init方法中可以得知,mThumbDrawable是通过获取当前Activity主题的android.R.attr.fastScrollThumbDrawable属性赋值,既然是这样的话,我们完全可以自定义一个主题,覆盖android.R.attr.fastScrollThumbDrawable属性对应的Drawable不就搞定了!
1、定义一个主题
1
2
3
|
<style name=
"ListViewFastScrollThumb"
parent=
"@android:style/Theme.Light.NoTitleBar.Fullscreen"
>
<item name=
"android:fastScrollThumbDrawable"
>@drawable/ic_launcher</item>
</style>
|
2、当前ListView所在Activity应用自定义的主题
1
2
3
4
5
6
7
8
9
|
<activity
android:name=
"com.example.actionbardemo.MainActivity"
android:label=
"@string/app_name"
android:theme=
"@style/ListViewFastScrollThumb"
>
<intent-filter>
<action android:name=
"android.intent.action.MAIN"
/>
<category android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
三。通过反射实现自定义快速滚动块图片经过分析发现,该图片是ListView超类AbsListView的一个成员mFastScroller对象的成员mThumbDrawable。这里mThumbDrawable是Drawable类型的。mFastScroller是FastScroller类型,这个类型比较麻烦,类的声明没有modifier,也就是default(package),只能供包内的类调用。 因此反射代码写的稍微麻烦一些: try { |