Zugriff auf Android-Ressourcen
Es gibt viele Dinge, die zum Aufbau einer hervorragenden Android-Anwendung verwendet werden. Neben der Anwendungsprogrammierung müssen Sie sich auf verschiedene Ressourcen konzentrieren, wie verschiedene statische Inhalte, die Sie verwenden, z. B. Bitmaps, Farben, Layoutdefinitionen, Benutzeroberflächenstrings, Animationen und so weiter. Diese Ressourcen werden im Allgemeinen in unabhängigen Unterverzeichnissen unter dem res/-Verzeichnis des Projekts abgelegt.
In diesem Tutorial erfahren Sie, wie Sie Anwendungsressourcen organisieren, alternative Ressourcen angeben und in der Anwendung auf sie zugreifen.
Organisieren von Ressourcen in Eclipse
Sie müssen jede Ressource in einem bestimmten Unterverzeichnis unter dem res/-Verzeichnis im Projekt ablegen. Hier ist zum Beispiel die Dateihierarchie eines einfachen Projekts:
MyProject/
src/
MyActivity.java
res/
drawable/
icon.png
layout/
activity_main.xml
info.xml
values/
strings.xml
Das res/-Verzeichnis enthält alle Ressourcen in verschiedenen Unterverzeichnissen. Hier gibt es eine Bildressource, zwei Layout-Ressourcen und eine String-Ressourcendatei. Die folgende Tabelle beschreibt die im res/-Verzeichnis des Projekts unterstützten Ressourcen im Detail.
| Verzeichnis | Ressourcentyp |
|---|---|
| anim/ | XML-Dateien, die Animationseigenschaften definieren. Sie werden im Ordner res/anim/ gespeichert und der Zugriff erfolgt über die Klasse R.anim. |
| color/ | XML-Dateien, die Farzzustandslisten definieren. Sie werden im Ordner res/color/ gespeichert und der Zugriff erfolgt über die Klasse R.color. |
| drawable/ | Bilddateien wie .png, .jpg, .gif oder XML-Dateien werden in Bitmaps, Zustandslisten, Formen und animierte Bilder kompiliert. Sie werden im Ordner res/drawable/ gespeichert und der Zugriff erfolgt über die Klasse R.drawable. |
| layout/ | XML-Dateien, die Benutzeroberflächenlayouts definieren. Sie werden im Ordner res/layout/ gespeichert und der Zugriff erfolgt über die Klasse R.layout. |
| menu/ | XML-Dateien, die Anwendungsmenüs definieren, wie Optionsmenüs, Kontextmenüs und Untermenüs. Sie werden im Ordner res/menu/ gespeichert und der Zugriff erfolgt über die Klasse R.menu. |
| raw/ | Beliebige Dateien, die in ihrer ursprünglichen Form gespeichert sind. Sie müssen Rohdateien öffnen, indem Sie Resources.openRawResource() basierend auf der Ressourcen-ID namens R.raw.filename aufrufen. |
| values/ | XML-Dateien, die einfache Werte enthalten (wie Strings, Ganzzahlen, Farben usw.). Hier sind einige Ressourcen-Namenskonventionen unter Ordnern. arrays.xml repräsentiert Array-Ressourcen, Zugriff über die Klasse R.array; integers.xml repräsentiert Integer-Ressourcen, Zugriff über die Klasse R.integer; bools.xml repräsentiert boolesche Ressourcen, Zugriff über die Klasse R.bool; colors.xml repräsentiert Farbressourcen, Zugriff über die Klasse R.color; dimens.xml repräsentiert Dimensionswerte, Zugriff über die Klasse R.dimen; strings.xml repräsentiert String-Ressourcen, Zugriff über die Klasse R.string; styles.xml repräsentiert Stilressourcen, Zugriff über die Klasse R.style. |
| xml/ | Sie können jede XML-Datei zur Laufzeit lesen, indem Sie Resources.getXML() aufrufen. Hier können Sie verschiedene Konfigurationsdateien speichern, die zur Laufzeit verwendet werden. |
Alternative Ressourcen
Ihre Anwendung muss Unterstützung für alternative Ressourcen für bestimmte Gerätekonfigurationen bereitstellen. Beispielsweise müssen Sie alternative Bildressourcen für unterschiedliche Bildschirmauflösungen und alternative String-Ressourcen für unterschiedliche Sprachen bereitstellen. Zur Laufzeit erkennt Android die aktuelle Gerätekonfiguration und lädt die entsprechenden Ressourcen für die Anwendung.
Um eine Reihe alternativer Ressourcen für eine bestimmte Konfiguration zu bestimmen, führen Sie die folgenden Schritte aus:
- Erstellen Sie ein neues Verzeichnis unter res/ mit dem Namen im Format <resource_name>_<config_qualifier>. Hierbei ist resources_name eine der in der obigen Tabelle genannten Ressourcen, z. B. layouts, images usw. Der Qualifier bestimmt, welche Ressourcen für die jeweilige Konfiguration verwendet werden. Eine vollständige Liste der Qualifier für verschiedene Ressourcentypen finden Sie in der offiziellen Dokumentation.
- Speichern Sie die entsprechenden alternativen Ressourcen in diesem Verzeichnis. Diese Ressourcendateien müssen dieselben Namen wie die Standard-Ressourcendateien haben, wie im Beispiel unten gezeigt; diese Dateien ersetzen jedoch den festgelegten Inhalt. Obwohl beispielsweise die Bilddateinamen gleich sind, ist bei hochauflösenden Bildschirmen auch die Bildauflösung hoch.
Das folgende ist ein Beispiel für die Angabe eines Standard-Bildschirmbilds und eines alternativen hochauflösenden Bilds.
MyProject/
src/
main/
java/
MyActivity.java
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
layout/
activity_main.xml
info.xml
values/
strings.xml
Das folgende ist ein weiteres Beispiel für die Angabe eines Standard-Sprachlayouts und eines alternativen arabischen Sprachlayouts.
MyProject/
src/
main/
java/
MyActivity.java
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
layout/
activity_main.xml
info.xml
layout-ar/
main.xml
values/
strings.xml
Zugriff auf Ressourcen
In der Anwendungsentwicklung müssen Sie auf definierte Ressourcen zugreifen, sei es über Code oder über XML-Dateien. Die folgenden Abschnitte beschreiben, wie Sie in diesen beiden Szenarien jeweils auf Ressourcen zugreifen.
Zugriff auf Ressourcen im Code
Wenn eine Android-Anwendung kompiliert wird, wird eine R-Klasse generiert, die IDs für alle Ressourcen im Verzeichnis res/ enthält. Sie können die R-Klasse verwenden, um über Unterklasse + Ressourcenname oder direkt über die Ressourcen-ID auf Ressourcen zuzugreifen.
Beispiel
Um auf res/drawable/myimage.png zuzugreifen und es auf einer ImageView festzulegen, verwenden Sie den folgenden Code:
ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage);
Hier verwendet die erste Codezeile R.id.myimageview, um die in der Layoutdatei als myimageview definierte ImageView abzurufen. Die zweite Zeile verwendet R.drawable.myimage, um das Bild namens myimage im Unterverzeichnis drawable von res/ abzurufen.
Beispiel
Betrachten Sie das nächste Beispiel, in dem res/values/strings.xml die folgende Definition enthält:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello, World!</string>
</resources>
Jetzt können Sie die Ressourcen-ID verwenden, um den Text des TextView-Objekts mit der ID msg wie folgt festzulegen:
TextView msgTextView = (TextView) findViewById(R.id.msg); msgTextView.setText(R.string.hello);
Beispiel
Betrachten Sie das als res/layout/activity_main.xml definierte Layout
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
Dieser Anwendungscode lädt dieses Layout für die Activity in der onCreate()-Methode wie folgt:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
Zugriff in XML
Betrachten Sie die folgende XML-Ressourcendatei res/values/strings.xml, die eine Farbressource und eine String-Ressource enthält -
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="opaque_red">#f00</color> <string name="hello">Hello!</string> </resources>
Jetzt können Sie diese Ressourcen in der folgenden Layoutdatei verwenden, um die Textfarbe und den Textinhalt festzulegen:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="@string/hello" />
Wenn Sie nun noch einmal zum Beispiel „Hello World!“ zurückkehren, das im vorherigen Kapitel erklärt wurde, bin ich sicher, dass Sie alle Konzepte in diesem Abschnitt besser verstehen werden. Daher empfehle ich dringend, zu den vorherigen Beispielen zurückzugehen und die grundlegende Verwendung der verschiedenen Ressourcen, die ich verwendet habe, zu überprüfen.
Andere Erweiterungen