解决 setProgressDrawableTiled 版本兼容性问题,在旧版本中 只能通过xml设置 android:progressDrawable来实现layer-list布局,代码直接设置setProgressDrawable无效,因为在这个之前还调用了一个私有方法tileify。新的版本中已经有setProgressDrawableTiled()可直接进行代码设置android:progressDrawable所指向的属性了参数 resId是一个 layer-list 布局xml
public static void setProgressDrawable(@NonNull RatingBar ratingBar, @DrawableRes int resId) { Drawable layerDrawable = ratingBar.getResources().getDrawable(resId); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { Drawable d = getMethod("tileify", ratingBar, new Object[]{layerDrawable, false}); ratingBar.setProgressDrawable(d); } else { ratingBar.setProgressDrawableTiled(layerDrawable); } } private static Drawable getMethod(String MethodName, Object o, Object[] paras) { Drawable newDrawable = null; try { Class c[] = new Class[2]; c[0] = Drawable.class; c[1] = boolean.class; Method method = ProgressBar.class.getDeclaredMethod(MethodName, c); method.setAccessible(true); newDrawable = (Drawable) method.invoke(o, paras); } catch (Exception ex) { ex.printStackTrace(); } return newDrawable; }
本文介绍了一种解决Android中RatingBar进度条在不同版本间兼容性问题的方法。针对老版本中仅能通过XML设置layer-list布局的问题,提供了一段代码,该代码能够根据不同Android版本选择合适的API进行layer-list资源的加载。

1314

被折叠的 条评论
为什么被折叠?



