その場で R.drawable.... name を生成する方法はありますか? 動的に生成された名前で背景画像を設定したい (既に として使用可能R.drawable.example_graphic
)
だから私は $ABC に文字列を割り当てる方法を見つけたい ->btn.setBackgroundImage(R.drawable.$ABC);
新しいドローアブルを作成するのではなく、既存のものを使用したい。
はい。Drawable はコンパイル時の定数です。何が存在するかを正確に把握できます。したがって、Application オブジェクトでマップを作成します。
public static final Map<String, Integer> NAMED_RESOURCES;
static {
Map<String, Integer> m = new HashMap<String, Integer>();
m.put(KEY1, R.drawable.ABC);
m.put(KEY2, R.drawable.DEF);
// ...
NAMED_RESOURCES = Collections.unmodifiableMap(m);
}
次のことができるようになりました。
btn.setBackgroundImage(Application.NAMED_RESOURCES.get($ABC));
@CommonsWareが共有しているように、解決策を見つけました。
getContext().getResources().getIdentifier("flags_"+country, "drawable","mypackage")
ただし、リフレクションを使用するため、キャッシュが必要になる場合があります。
したがって、静的な HashMap を作成して ResourceName と getIdentifier 関数 (整数) の結果を保持することは良い考えのようです。同じ ResourceName をさらに使用すると、リフレクションを再度使用する代わりに、HashMap から値を取得するだけです。