【转】自定义ListView FastScroller滑块图片
来源:互联网 发布:网络安全意识培训内容 编辑:程序博客网 时间:2024/05/01 14:21
自定义ListView FastScroller滑块图片
使用ListView FastScroller,默认滑块和自定义滑块图片的样子:
设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可:
<ListView android:id="@+id/listView" android:layout_width="fill_parent"
android:fastScrollEnabled="true" android:layout_height="fill_parent"
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使用该属性,但是模拟器这里没有效果。
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:scrollbarAlwaysDrawHoriz设置垂直滚动条背景(轨迹)的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(默认值
- 【转】自定义ListView FastScroller滑块图片
- Android-自定义ListView FastScroller滑块图片
- 自定义ListView FastScroller滑块图片
- 自定义ListView FastScroller滑块图片
- ListView自定义 FastScroller滑块
- 自定义ListView FastScroller滑块图片 以及 android:fastScrollEnabled="true" 不起作用
- Android常见问题分析之自定义ListView FastScroller滑块图片 以及 android:fastScrollEnabled="true" 不起作用
- ListView自定义滑块
- 研究ListView里的FastScroller的一点心得
- fastScrollEnabled:ListView的快速滑动模式,以及滑块的自定义
- ListView自定义快速滑块 FastScroll兼容高版本
- 自定义带图片的ListView的实现
- Android自定义ListView与图片异步加载
- Android自定义ListView与图片异步加载
- Android自定义ListView图片从服务端获取
- 自定义ListView滚动时,图片显示错乱
- Android中自定义SeekBar的背景颜色,进度条颜色,以及滑块的图片
- Android中自定义SeekBar的背景颜色,进度条颜色,以及滑块的图片
- Junit
- 如何安装 Android SDK 和Eclipse 插件
- 数据结构的静态查找(C语言实现)
- 网站压力测试工具
- ASP.net动态加载JS代码与CSS文件
- 【转】自定义ListView FastScroller滑块图片
- 杂项设备和字符设备的区别
- linux 拾遗
- 由Kindle展现出的Android发展之路
- 28个HTML5小说明
- html5的预载入技术
- 再续 Xcode 4.2 中的Automatic Reference Counting (ARC)
- html特殊符编码
- .net打包/C#WinFrom程序打包/图解.net打包/.net安装部署图解/VS2008项目的安装与部署图解