我正在使用ContextCompat.getColor
获取颜色资源,并且对不赞成使用的方法(例如Context
的{{1}})具有向后兼容性。
例如:
getColor
到目前为止,在所有使用过的地方都可以正常使用,但是我在应用的崩溃日志中看到很多问题,如下所示:
ContextCompat.getColor(context, R.color.black)
查看电话/ Android版本,它们都属于棉花糖家族(6.0 – 6.1),并且我在API检测中添加了一些日志记录,并可以确认它们处于API级别23。
在制造商方面,他们是小米,联想,中兴和OPPO。
到目前为止,我的解决方案是:
Caused by java.lang.NoSuchMethodError: No virtual method getColor(I)I in class Landroid/content/Context; or its super classes (declaration of 'android.content.Context' appears in /system/framework/framework.jar)
at android.support.v4.content.ContextCompat.getColor(ContextCompat.java:418)
at com.myapp.MyView.method(MyView.kt:XXX)
这很好,但远非理想,因为我希望能够透明地使用int color;
try {
color = ContextCompat.getColor(context, colorRes);
} catch (NoSuchMethodError e) {
if (Build.VERSION.SDK_INT != Build.VERSION_CODES.M) {
// log for a while, to catch if any other versions/devices have issues
Timber.e(
e,
"Couldn't use getColor in API level %s (%s)",
Build.VERSION.SDK_INT,
Build.VERSION.RELEASE
);
}
color = context.getResources().getColor(colorRes);
}
// Now I know color has a value :D
并忘记这一点。
我尝试了appcompat版本ContextCompat
和27.1.0
。有人遇到过这个问题吗?有没有更好的方法来解决它?
答案 0 :(得分:0)
ContextCompat.getColor()
是Support V4库的一部分。
ContextCompat.getColor(YourActivity.this, R.color.my_color)
您需要通过在应用程序build.gradle中添加以下依赖项来添加 Support V4库:
compile 'com.android.support:support-v4:23.0.1'
希望它会对您有所帮助。