2017-09-07 25 views
0

私はそこにいくつかの答えがあることを知っていますが、私は成功していないそれらを試してみました。 color.xmlファイルの定義済みのリソースカラーを使用して読み込まれたときに、アイコンの色を変更するコードを以前に作っていました。異なるフレーバーの場合、私は異なるcolor.xmlファイルを持っています。私はcolor.xmlファイルがピックアップされ、他の色が正常に使用されているので使用されていることを知っています。私が言ったように、これは以前はEclipseから取り組み、Antビルドを使用していました。しかし、私はいくつかのライブラリをアップグレードしています。そのため、この問題を引き起こす可能性があると思われます。見知らぬ人でさえ、Android Studioがデバッグで使い果たされたときに動作しますが、Gradleを使用してビルドした場合は動作しません。画像の色をプログラムで変更するAndroid

ここで以前働いていたコード(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

実行している場合、正しくは次のようになります。容疑者が、私はそれを追加することができますGradleのファイルですが、Androidのメーカーが構築するためにそれを使用しない場合は

enter image description here

デバッグ版も?

私は、アイコンの色を読み込むためにさまざまな方法を試しましたが、すべて成功しませんでした。また、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ビルドでは、新しいパッケージ名ではなく、古いパッケージ名(ハードコードされたもの)の下にあるすべてのイメージが含まれていました。うん、それは何をやっていたのか分からなかった私のコードではなく、デバッグするには楽しい1つ。

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); 
    } 
:ちょうど動的にパッケージを呼び出すために必要な

関連する問題