应用程序更新后应用程序加载错误的颜色

时间:2017-11-24 09:22:01

标签: android android-layout

我的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));

1 个答案:

答案 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 而不是颜色值。

因此,您需要保存颜色值或保存颜色资源的名称。