2017-11-24 1 views
0

Android 응용 프로그램에서 자원을로드하는 데 정말 이상한 문제가 있습니다. 시작에서 환경에 대한 몇 가지 소개 :응용 프로그램 업데이트 후 응용 프로그램이 잘못된 색상을로드 중입니다.

android { 
    compileSdkVersion 27 
    buildToolsVersion '26.0.2' 

    defaultConfig { 
    applicationId appPackageName 
    minSdkVersion 15 
    targetSdkVersion 27 
    versionCode verCode 
    versionName verName 

    multiDexEnabled true 
    ... 
} 

내가 코드 버전 (40)를 사용하여 응용 프로그램을 가지고, 신선한 후 모든 것이 OK입니다 설치합니다. 몇 가지 커밋을 한 후에는 41로 설정된 코드 버전으로 빌드를 준비했습니다.이 빌드는 아무런 문제없이 작동합니다. 이상한 일들은 40에서 41로 응용 프로그램을 업데이트 할 때 시작됩니다. 내가 알아 차린 응용 프로그램의 한 위치에서이 작업을 수행 한 후 자원에서로드 된 색상이 올바르지 않습니다. 여기

내가 텍스트 색상을 설정하고있어 어떻게 라인 (ArrayAdapter와)입니다 : 응용 프로그램 업데이트 후 내가 잘못 색상 식별자를 얻을,

holder.titleTextView.setTextColor(ContextCompat.getColor(context, value.getColor())); 

나는 몇 가지 조사를 수행하고 발견했습니다 (R.java에 배치 같은 자원에 대한 파일) :

신선한 설치 41 (OK) :

7F06007F => public static final int my_text_font_color=0x7f06007f; 

업데이트 40에서 41 (잘못된) :

7F060082 => public static final int my_window_color=0x7f060082; 

이 문제를 해결하는 방법은 무엇입니까?

편집 (기타 정보)

일반적 컬러 리소스 ID로 설정 속성을 가지는 영역 객체의 인스턴스이다

여기
public Integer getColor() { 
    return color; 
} 

이 색상 설정 방법 예이다 :

realm.copyToRealmOrUpdate(new Setting(context.getString(R.string.status_pending), "pending", R.color. my_text_font_color)); 
+0

'값은 무엇입니까?getColor()'왜 R.color.someColor'가 아닌가? – Yupi

+0

@Yupi 초기 게시물에 더 많은 정보를 추가했습니다. – Grzegorz

답변

1

이것은 자동 ID 인 색상 ID를 저장하고 있기 때문입니다. 안드로이드 스튜디오에 의해 R.java 클래스에 의해 nerated. 리소스에 뷰, 문자열 등을 추가 할 때마다 R.java가 새로운 id 집합으로 업데이트됩니다.
이와 연관된 색을 돌려줍니다

getColor (컨텍스트 컨텍스트, INT 아이디) :

ContextCompat.getColor(Context context, int id) 아마 컬러 ID에서 색상의 값을 반환하면 리소스 파일을 업데이트 할 때마다 다른 ID입니다 특정 리소스 ID

M부터 시작하여 반환 된 색은 지정된 Context 테마에 맞게 스타일이 지정됩니다.

다음과 같은 코드를 호출 할 때 :

realm.copyToRealmOrUpdate(new Setting(context.getString(R.string.status_pending), "pending", R.color. my_text_font_color)); 

당신은 컬러 자원 ID하지 색상 값을 저장하고 있습니다.

그래서 색상 값을 저장하거나 색상 자원의 이름을 저장해야합니다.

관련 문제