App mit mehreren Designs erstellen - Namen der drawable-Dateien in styles.xml auslagern?

  • Antworten:1
Robert G.
  • Forum-Beiträge: 1

30.05.2013, 00:47:30 via Website

Hallo zusammen,

ich sitz grad an der Optimierung einer App und habe folgenden Code:

public SvView(Context context) {

super(context);
Resources res = getResources();
schiff2_w = BitmapFactory.decodeResource(res, R.drawable.schiff_2);
schiff2_w_versunken = BitmapFactory.decodeResource(res, R.drawable.schiff_2_versunken);
schiff2_s = BitmapFactory.decodeResource(res, R.drawable.schiff_2_s);
schiff2_s_versunken = BitmapFactory.decodeResource(res, R.drawable.schiff_2_s_versunken);


Nun möchte ich 3 verschiedene Designs einbinden, und daher den Code flexibler gestalten. D.h. ich habe 3 verschiedene Bilder zu schiff_2, zu schiff_2_versunken etc. Eigenlich möchte ich die einzelnen Designs jeweils in einer styles.xml speichern und beim erzeugen der Activity eine bestimmte laden. Meine 3 Styles-Dateien:

styles1.xml: <item name="schiff_2">@drawable/schiff_2_1</item>

styles2.xml: <item name="schiff_2">@drawable/schiff_2_2</item>

styles3.xml: <item name="schiff_2">@drawable/schiff_2_3</item>


Der decodeResource-Aufruf verlangt die Id als Integer-Wert. Wie kann ich diesen in den styles.xml einfügen und dann auch aufrufen?
Ich bekomme das nicht ganz hin.

Besten Dank, gruß Robert

— geändert am 30.05.2013, 00:47:49

Antworten
Gelöschter Account
  • Forum-Beiträge: 10

30.05.2013, 01:26:33 via Website

Hallo Robert,

Versuchs mit folgendem:

1TypedArray ta = obtainStyledAttributes(new int[] { R.attr.schiff_2});
2Drawable d = ta.getDrawable(0);
3ta.recycle();

Das setzt allerdings vorraus, dass du dein eigenes style-attribut auch deklariert hast:
1<attr name="schiff_2" format="reference" />

Anmerkung:
In XML-Layouts kannst du auch Resourcen aus dem aktuellen Theme referenzieren:
1<ImageView
2 android:src="?attr/schiff_2"/>

Dabei passiert genau das gleiche, wie bei der Verwendung von obtainStyledAttributes.

Grüße,
Jonas

— geändert am 30.05.2013, 01:30:30

Antworten