列表快速滚动,是比较常见的需求,特别是在通讯录上。
现在 Android 好多 APP 都是字母索引栏,其实字母索引是 IOS 那边的规范,很多人觉得好用就抄过来了。
在 Android 上原生的是叫 Fast Scroll ,特点是默认隐藏的,也没有一排的字母显示出来,只能在划动列表时出现。
Fast Scroll 实现方法:
- 继承 ListActivity (普通的 Activity 貌似不行);
- 调用 setFastScrollEnabled(true) (也可以在 XML 里设置)。
- 配置索引(这一步比较麻烦,特别是中文)
配置样式:(这里没运行测试的,仅供参考)
<resources>
<style name="AppBaseTheme" parent="android:Theme.Light">
</style>
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:fastScrollThumbDrawable">@drawable/fastscroll_thumb_holo</item>
<item name="android:fastScrollOverlayPosition">atThumb</item>
<item name="android:fastScrollTextColor">@color/apptheme_color</item>
<item name="android:fastScrollTrackDrawable">@drawable/fastscroll_thumb_pressed_holo</item>
<item name="android:fastScrollPreviewBackgroundRight">@drawable/bg_default_focused_holo_light</item>
</style>
</resources>
字母索引栏实现方法,比较原生的 FastScroll 就是要创建自定义的 View 来显示字母;
一般情况下,要先拿到中文的拼音首字母,如果是英文的就直接使用,然后按字母分类排列,添加索引配置。一切事件都要自己来做。
这个现在没看到比较简单纯粹的例子,我经历了几个项目,都是进行了大量的自定义配置。
可以参考一下蘑菇街的即时通讯开源项目:
TTAndroidClient 。
拼音的生成有两种方式
使用 Android 内部的方法,看别人的经验,有些会转错,要自己调整码,不知道新版是否解决这些问题。
最新版的代码:
HanziToPinyin.java 、
Transliterator.java;
例子我上次到
我的 CSDN 资源文件里了,暂时发现“呵”会转错为 “A”,也就是说正确率不是 100% 的。
原生通讯录的实现方式很经典,可以研究一下源码。