API 23中的ContextCompat.getColor崩溃(找不到Context.getColor)

时间:2018-10-26 18:03:37

标签: android android-appcompat

我正在使用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版本ContextCompat27.1.0。有人遇到过这个问题吗?有没有更好的方法来解决它?

1 个答案:

答案 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'

希望它会对您有所帮助。