Android-Programmierung GUI: strings.xml
Willemers Informatik-Ecke
Auf diesen Seiten halte ich meine Erfahrungen im Bereich der Android-Programmierung fest, um sie später nachschlagen zu können. Die Ausführungen sind kein vollständiger Kurs, manchmal nur Notizen, aber vielleicht anderen hilfreich.

Strings gehören nach strings.xml

Im Verzeichnis values liegt die Datei strings.xml. Hier werden alle Texte abgelegt.

Ein typischer Eintrag in der Datei strings.xml sieht so aus:

<string name="newgame">New Game</string>
Auf diesen Eintrag können Sie aus einer Layout-Datei zugreifen. Dazu schreiben Sie @string/newgame statt des Textes.
<Button
    android:id="@+id/btNeu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/newgame"
Sie können auf diesen String auch vom Java-Programm aus zugreifen. Dazu verwenden Sie in einer Acitivity folgenden Aufruf:
String str = getString(R.string.newgame);

Mehrsprachigkeit

Um eine deutschsprachige Version zu erzeugen, legt man ein Verzeichnis values-de an, kopiert die Datei strings.xml und passt die Inhalte an. Im Verzeichnis values-de wird der Eintrag so angepasst:
<string name="newgame">Neues Spiel</string>
Ist das Android-Handy deutschsprachig, wird automatisch die zweite Variante gezogen und das Programm spricht mit dem Anwender deutsch.

Anlegen der deutschen strings.xml im Android-Studio

Wenn man das Android-Studio verwendet, kann man das Verzeichnis nicht etwa anlegen, sondern muss das Verzeichnis values mit der rechten Maustaste anklicken. Im Menü muss New | Values resource file angeklickt werden. Es erscheint ein Dialog, in dem als File-Name strings.xml angegeben wird und in dem der Eintrag Locale in die Choosen qualifiers übernommen wird. Nun können Sie Deutschland ausgewählen. Daraufhin erscheint eine zweite Datei strings.xml im Verzeichnis values, hinter der in grauen Zeichen de vermerkt ist.

String-Arrays

Neben einfachen Strings können auch Arrays angelegt werden. Das folgende Beispiel enthält die verschiedenen Texte, die ein Programm zur Berechnung des Body Mass Index (BMI) ausgibt.
<resources>
    ...
    <string-array name="arrayBmiText">
        <item>nicht überlebensfähig</item>
        <item>lebensbedrohlich</item>
        <item>muss stationär behandelt werden</item>
        <item>Untergewicht</item>
        <item>Normalgewicht</item>
        <item>Übergewicht</item>
        <item>Adipositas Grad I</item>
        <item>Adipositas Grad II</item>
        <item>Adipositas Grad III</item>
    </string-array>
</resources>
Um ein solches String-Array von Java aus auszulesen, greifen Sie mit der Methode getStringArray auf die Ressource zu.
String[] bmiText = getStringArray(R.array.arrayBmiText);

Strings mit Platzhaltern

Analog zum printf, das mancher aus der Sprache C kennt, können Format-Strings in der strings.xml definiert werden, die vom Programm zur Laufzeit mit Werten gefüllt werden.
<string name="score"> %1$d s. hits: %2$d - marks %3$d</string>
Hinter den Prozentzeichen steht die Nummer des Parameters von getString. Hinter dem Dollarzeichen steht der Typ. Das d steht für dezimal. Ein s steht für String.

Im Source-Code werden der Methode getString in weiteren Parametern die Werte übergeben, die an den Platzhaltern dargestellt werden sollen.

String str = getString(R.string.score, zeit, getHits(), getMarkierungen());