2

その場で R.drawable.... name を生成する方法はありますか? 動的に生成された名前で背景画像を設定したい (既に として使用可能R.drawable.example_graphic)

だから私は $ABC に文字列を割り当てる方法を見つけたい ->btn.setBackgroundImage(R.drawable.$ABC);

新しいドローアブルを作成するのではなく、既存のものを使用したい。

4

2 に答える 2

3

はい。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));

于 2013-03-01T14:41:21.547 に答える
1

@CommonsWareが共有しているように、解決策を見つけました。

getContext().getResources().getIdentifier("flags_"+country, "drawable","mypackage")

ただし、リフレクションを使用するため、キャッシュが必要になる場合があります。

したがって、静的な HashMap を作成して ResourceName と getIdentifier 関数 (整数) の結果を保持することは良い考えのようです。同じ ResourceName をさらに使用すると、リフレクションを再度使用する代わりに、HashMap から値を取得するだけです。

于 2013-03-01T14:50:23.023 に答える