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. EditText属性描述
  3. Android实现为GridView添加边框效果
  4. Android Visibility属性详解
  5. Android ListView 效果美化
  6. Android布局文件属性
  7. android:clipChildren属性

随机推荐

  1. Android(安卓)应用获取通知栏权限
  2. Android(安卓)蓝牙(BLE)连接,发送,接收消息
  3. Android可视化统计模块
  4. android 自定义View
  5. Android(安卓)短信发送器
  6. 如何在android中使用你自己的数据文件
  7. android 单选,复选按钮,以及toast
  8. multipart data using Android(安卓)Voll
  9. 【Android(安卓)Studio】Manifest Merger
  10. android jni 多线程编程 join thread