android listview 中如何设置滚动条中滑块的样式
我用了网上提供的:try{Fieldf=AbsListView.class.getDeclaredField("mFastScroller");if(!f.isAcces...
我用了网上提供的:
try {
Field f = AbsListView.class.getDeclaredField("mFastScroller");
if(!f.isAccessible()){
f.setAccessible(true);
}
Object o = f.get(lv_foodList);
f = f.getType().getDeclaredField("mThumbDrawable");
f.setAccessible(true);
Drawable drawable=(Drawable) f.get(o);
drawable = getResources().getDrawable(R.drawable.audio_blue);
f.set(o,drawable);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
但是不管用,报异常java.lang.NoSuchFieldException: mThumbDrawable,哪位高手帮忙指导一下。谢谢。 展开
try {
Field f = AbsListView.class.getDeclaredField("mFastScroller");
if(!f.isAccessible()){
f.setAccessible(true);
}
Object o = f.get(lv_foodList);
f = f.getType().getDeclaredField("mThumbDrawable");
f.setAccessible(true);
Drawable drawable=(Drawable) f.get(o);
drawable = getResources().getDrawable(R.drawable.audio_blue);
f.set(o,drawable);
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
但是不管用,报异常java.lang.NoSuchFieldException: mThumbDrawable,哪位高手帮忙指导一下。谢谢。 展开
展开全部
mThumbDrawable
这个文件没有,根本为崩溃;
并不是方法不好用,是你没有抄全;
在实际应用中,该代码会出现异常,通过对几个sdk源码的对比,发现Google会对其中的属性做一些微调:
如在5.x中,“mFastScroller”改为了“mFastScroll”,4.4中则把“mThumbDrawable”改为“thumbDrawable”并设为了final,在5.x中又恢复成了private.
所以在实际应用中还需加以判断。下面是针对4.4修改后的代码:
由于class FastScroller没有public属性,无法直接导包获取到,所以从用到该类的AbsListView中获取。
try {
Field f = AbsListView.class.getDeclaredField("mFastScroller"); //获取AbsListView中的属性mFastScroller
f.setAccessible(true);//设置属性可修改
Object o = f.get(listview);//得到listview实例
// Field[] fields = f.getType().getDeclaredFields();
// for (Field field : fields) {
// Log.v("TAG", field.getName());
// } //查看所有属性名
f = f.getType().getDeclaredField("mThumbImage");//获取属性mThumbImage(由于 4.4中的thumbDrawable不可修改,所以直接取其imageview)
f.setAccessible(true);
ImageView img = (ImageView) f.get(o); //得到ImageView实例
img.setImageDrawable(getResources().getDrawable(R.drawable.icon));
f.set(o, img); //把编辑好的ImageView放进去
} catch (Exception e) {
throw new RuntimeException(e);
}
这个文件没有,根本为崩溃;
并不是方法不好用,是你没有抄全;
在实际应用中,该代码会出现异常,通过对几个sdk源码的对比,发现Google会对其中的属性做一些微调:
如在5.x中,“mFastScroller”改为了“mFastScroll”,4.4中则把“mThumbDrawable”改为“thumbDrawable”并设为了final,在5.x中又恢复成了private.
所以在实际应用中还需加以判断。下面是针对4.4修改后的代码:
由于class FastScroller没有public属性,无法直接导包获取到,所以从用到该类的AbsListView中获取。
try {
Field f = AbsListView.class.getDeclaredField("mFastScroller"); //获取AbsListView中的属性mFastScroller
f.setAccessible(true);//设置属性可修改
Object o = f.get(listview);//得到listview实例
// Field[] fields = f.getType().getDeclaredFields();
// for (Field field : fields) {
// Log.v("TAG", field.getName());
// } //查看所有属性名
f = f.getType().getDeclaredField("mThumbImage");//获取属性mThumbImage(由于 4.4中的thumbDrawable不可修改,所以直接取其imageview)
f.setAccessible(true);
ImageView img = (ImageView) f.get(o); //得到ImageView实例
img.setImageDrawable(getResources().getDrawable(R.drawable.icon));
f.set(o, img); //把编辑好的ImageView放进去
} catch (Exception e) {
throw new RuntimeException(e);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询