2017-09-07 4 views
0

거기에 몇 가지 해답을 알고 있지만, 나는 그들을 성공적으로 시도했다. color.xml 파일의 미리 정의 된 리소스 색상을 사용하여로드 할 때 아이콘 색상을 변경하는 코드가 있습니다. 다른 풍미를 위해 나는 다른 color.xml 파일이있다. 나는 color.xml 파일이 다른 색상이 성공적으로 사용됨에 따라 집어 들고 사용되는 것을 알고 있습니다. 앞서 말했듯이, 이전에는 Eclipse에서 작업 중이었고 Ant 빌드를 사용했습니다. 그러나 여러 라이브러리를 업그레이드 했으므로이 문제가 발생하기 위해 무언가가 변경되었을 수도 있습니다. 낯선 사람인 경우에도 Android Studio가 부족할 때 디버그에서 작동하지만 Gradle을 사용하여 빌드하면 작동하지 않습니다. 여기 프로그래밍 방식으로 이미지의 색상 변경 안드로이드

이전에 작업 한 코드합니다 (setColorFilter 범인 의심?)입니다 :

ImageButton btnYes = new ImageButton(mContext); 
btnYes.setPadding(0, 15, 15, 15); 
btnYes.setTag(1); 
Drawable yesDrawable = Utilities.getAndroidDrawable("form_ratingyes", mContext); 
btnYes.setImageDrawable(yesDrawable); 
btnYes.setFocusableInTouchMode(false); 
btnYes.setBackgroundColor(Color.WHITE); 
btnYes.setColorFilter(ContextCompat.getColor(mContext,R.color.rating_off)); 

color.xml 파일은 다음과 같다 :

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <!-- Bullet Icon Color for (Forms, In Progress, Sync and Submitted Status)--> 
    <color name="bullet">#0378AF</color> 

    <!-- Navigation Bar Color--> 
    <color name="navigation_bar">#F68A33</color> 

    <!-- Menu Icon Color--> 
    <color name="menu_tint">#F68A33</color> 
    <color name="form_icons">#F68A33</color> 

    <!-- Rating Field Button Color --> 
    <color name="rating_on">#F68A33</color> 
    <color name="rating_off">#A2AAAD</color> 

    <!-- Action Button Color --> 
    <color name="login_button_default">#F68A33</color> 
    <color name="login_button_selected">#B0540B</color> 
</resources> 

을 그리고 이미지의 모습 이 :

기본적으로 투명한 "Y"와 외부 원을 가진 흰색 원입니다. 아이디어는 흰색이 "rating_on"색으로 바뀝니다. 제대로 실행되면

enter image description here

는 다음과 같아야합니다

enter image description here

을 용의자 내가 그것을 추가 할 수 있습니다 Gradle을 파일이지만, 구축하지 안드로이드 스튜디오 사용을 않는 경우 너무 버전을 디버그?

저는 아이콘 색상을로드하는 여러 가지 방법을 시도했지만 성공하지 못했습니다. 또한 setColorFilter으로 전화하기 전에 .getDrawable()을 붙이려고했습니다. 안타깝게도 Android Studio에서 작동하기 때문에 디버깅하기가 어렵습니다. 실제 APK를 생성 할 때만 실패합니다.

답변

0

위의 코드는 정상입니다.

public static Drawable getAndroidDrawable(String drawableName, Context context){ 
    int resourceId= context.getResources().getIdentifier(drawableName, "drawable", imagepackage); 
    if(resourceId==0){ 
     return null; 
    } else { 
     return ContextCompat.getDrawable(context, resourceId); 
    } 

imagepackage했다 : 문제는이 닮은 Utilities.getAndroidDrawable("form_ratingyes", mContext); 호출의 창자에 있었다

public final static String imagePackage = "com.mycompany.myapp"; 

그래서 분명하지만, 그 방법으로 탐구하지 않았다. 부끄러운 줄 알아. 어떻게 든 오래된 Ant 빌드에서는 새로운 패키지 이름이 아닌 이전 패키지 이름 (하드 코딩 된) 아래에 모든 이미지가 포함되었습니다. 네, 재미있는 디버깅을 해봅시다. (내 코드가 아니기 때문에 그것이 무엇을했는지 알지 못했습니다.)

public static Drawable getAndroidDrawable(String drawableName, Context context){ 
    int resourceId= context.getResources().getIdentifier(drawableName, "drawable", context.getPackageName()); 
    if(resourceId==0){ 
     return null; 
    } else { 
     return ContextCompat.getDrawable(context, resourceId); 
    } 
:

은 그냥 동적으로 패키지를 요구하는 데 필요한