android.content.res.Resources$NotFoundException: Resource ID #0xff3f92d5

今天遇到一个问题,在小米、华为手机上没有报错,在oppo 5.1版本报android.content.res.Resources$NotFoundException: Resource ID #0xff3f92d5 这个问题

先贴出我的解决方案

我调用的方法如下

protected void setProgressBarColor(int colorId, ProgressBar mProgressBar) {
		// fixes pre-Lollipop progressBar indeterminateDrawable tinting
		if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {

			Drawable wrapDrawable = DrawableCompat.wrap(mProgressBar.getIndeterminateDrawable());
			DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(context, colorId));
			mProgressBar.setIndeterminateDrawable(DrawableCompat.unwrap(wrapDrawable));
		} else {
			mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(context, colorId), PorterDuff.Mode.SRC_IN);
		}
	}
DrawableCompat.setTint(wrapDrawable, ContextCompat.getColor(context, colorId));

或者

mProgressBar.getIndeterminateDrawable().setColorFilter(ContextCompat.getColor(context, colorId), PorterDuff.Mode.SRC_IN);

都会报错

原先是这样调用的

setProgressBarColor(context.getResources().getColor(R.color.update_progress_bar_bg),progressBar);

修改为如下方式好,不再报错。

setProgressBarColor(R.color.update_progress_bar_bg,progressBar);

原因如下:

1、首先,我检查这个资源是存在的,values文件只有一个,不存在不同分辨率适配问题

2、考虑是不是oppo存在特殊性,因为报错找不到#0xff3f92d5,所以我把值修改为#f'f3f92d5ff,同样不行

#3f92d5

3、既然是这局代码报错,是不是api版本问题呢

ContextCompat.getColor(context, colorId)

4、果然,百度得到结果

在android 23(6.0)及以上getResources.getColor(R.color.colorId)API过时时,那么它的替代方法为

ContextCompat.getColor(context,R.color.colorId);

可以使用最新的V4兼容包中的ContextCompat,这样也可以兼容低版本的平台

 

所以,改成setProgressBarColor(R.color.update_progress_bar_bg,progressBar);

而不是setProgressBarColor(context.getResources().getColor(R.color.update_progress_bar_bg),progressBar);

你可能感兴趣的:(android)