我的Android应用程序中的资源加载(颜色)有一个非常奇怪的问题。 一开始有关环境的介绍:
android {
compileSdkVersion 27
buildToolsVersion '26.0.2'
defaultConfig {
applicationId appPackageName
minSdkVersion 15
targetSdkVersion 27
versionCode verCode
versionName verName
multiDexEnabled true
...
}
我有一个代码版本为40的应用程序,在全新安装后一切正常。在几次提交之后,我已经准备好了将代码版本设置为41的构建。这个构建也没有任何问题。当我从40到41进行应用程序更新时,奇怪的事情开始了。在我注意到的应用程序中的一个地方执行此操作后,从资源加载的颜色不正确。
以下是我如何设置文字颜色(ArrayAdapter):
holder.titleTextView.setTextColor(ContextCompat.getColor(context, value.getColor()));
我做了一些调查,发现在应用程序更新后,我得到了相同资源的错误颜色标识符(放在R.java文件中):
全新安装41(确定):
7F06007F => public static final int my_text_font_color=0x7f06007f;
从40更新到41(错误):
7F060082 => public static final int my_window_color=0x7f060082;
任何想法或提示如何解决此问题?
修改(更多信息)
通常 value 是Realm对象的实例,其属性设置为颜色资源ID:
public Integer getColor() {
return color;
}
以下是设置此颜色的示例:
realm.copyToRealmOrUpdate(new Setting(context.getString(R.string.status_pending), "pending", R.color. my_text_font_color));
答案 0 :(得分:1)
这是因为您正在存储由{@ 1}}类中的Android Studio自动生成的颜色ID。无论何时在资源中添加视图,字符串等,都会使用新的id集更新R.java。
ContextCompat.getColor(Context context, int id)返回颜色id的颜色值,每当您更新资源文件时,颜色id可能是不同的id:
getColor(上下文上下文,int id)
关联的颜色
返回与特定资源ID从M开始,返回的颜色将针对指定的Context主题设置样式。
当您拨打以下代码时:
R.java
您正在保存颜色资源ID 而不是颜色值。
因此,您需要保存颜色值或保存颜色资源的名称。