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