Android ListView 滚动条的设置详解

1.滚动条的属性

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:fastScrollEnabled

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

2.问题注意

注意:可能是适配的原因,可能你设置了scrollbarSize看不多效果,但是如果你配置scrollbarThumbVertical使用就可以看到

 

3.如何修改滑块的样式

 依据是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); } 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

更多相关文章

  1. Android(安卓)打开设置的各个页面
  2. 设备驱动-----Android关机流程总结
  3. Android(安卓)中文设置成粗体的方法
  4. 【Android學習專題】實用參考:android权限大全
  5. EditText属性描述
  6. 【Android】调用系统应用常用uri & intent设置
  7. Android实时绘制效果(二)
  8. android 中给图片加圆角效果
  9. android shape的使用

随机推荐

  1. Android(安卓)沉浸式模式与常见状态栏和
  2. MAC Android(安卓)Studio编写Android(安
  3. 理解Android(安卓)Java垃圾回收机制
  4. Android获取手机WiFi IP地址,MAC地址和网
  5. 超详细的Android系统50大必备秘籍分享
  6. Android(安卓)apk安装过程及Java、JNI读
  7. 第七章 ARM 反汇编基础(三)(ARM 原生程序的
  8. VirtualAPK:滴滴 Android(安卓)插件化的实
  9. uniapp解决多条socket连接冲突问题
  10. Android(安卓)Coding 利器 之 掌握小技巧