Zeichenfolgen-XML für Android
Manchmal wird es gewünscht, Zeichenfolgen außerhalb des Java -Quelltextes aufzubewahren. Dies erleichtert es möglicherweise, Zeichenfolgen zu überarbeiten, wie dies etwa bei der Lokalisierung (Übersetzung) eines Programms notwendig werden kann.
Anpassungen eines Skripts
In der Datei »50_run.cmd« ist das alte Fragment »old« durch das neue Fragment »new« zu ersetzen.
- old
@MKDIR "%MAIN%"
@IF ERRORLEVEL 1 GOTO OUT
@MKDIR "%PROJECT%\obj"
@MKDIR "%PROJECT%\lib"
@MKDIR "%PROJECT%\bin"
@MKDIR "%PROJECT%\src\res"
@MKDIR "%SOURCE%\com\example"
@COPY AndroidManifest.xml "%MAIN%">nul:- new
@DEL /F/S/Q project
@RMDIR /S/Q project
@MKDIR "%PROJECT%"
IF ERRORLEVEL 1 GOTO OUT
@MKDIR "%PROJECT%\src"
@MKDIR "%MAIN%"
@MKDIR "%PROJECT%\obj"
@MKDIR "%PROJECT%\lib"
@MKDIR "%PROJECT%\bin"
@MKDIR "%PROJECT%\src\res"
@MKDIR "%PROJECT%\src\res\anim"
@MKDIR "%PROJECT%\src\res\animator"
@MKDIR "%PROJECT%\src\res\color"
@MKDIR "%PROJECT%\src\res\values"
@MKDIR "%PROJECT%\src\res\layout"
@MKDIR "%PROJECT%\src\res\menu"
@MKDIR "%PROJECT%\src\res\raw"
@MKDIR "%PROJECT%\src\res\xml"
@MKDIR "%PROJECT%\src\res\drawable"
@MKDIR "%PROJECT%\src\assets"
@MKDIR "%SOURCE%\com\example"
@COPY AndroidManifest.xml "%MAIN%">nul:
@COPY strings.xml "%PROJECT%\src\res\values\"
@COPY main.xml "%PROJECT%\src\res\layout\"
@%SDK%\build-tools\aapt.exe ^
package ^
-v ^
-f ^
-m ^
-S %PROJECT%\src\res ^
-J %PROJECT%\src\main\java ^
-M %PROJECT%\src\main\AndroidManifest.xml ^
-I %SDK%\platforms\%PLATFORM%\android.jar
Das Skript kopiert unsere Datei aus dem Hauptverzeichnis in einen Projektordner, der die vom Android -SDK erwartete Struktur aufweist.
Der zusätzliche Aufruf von »aapt.exe« erzeugt nun die Datei »R.java«, mit Informationen zu den angegebenen Zeichenfolgen. Der im Skript schon vorhandene spätere Aufruf von »aapt.exe« integriert diese Resourcendatei dann in das Produkt.
Hinzufügen der XML-Dateien
XML wurde bereits zuvor in Lektion (5.2.) kurz erklärt.
Es sind noch die beiden folgenden Dateien anzulegen (im selben Verzeichnis, in dem sich auch »50_run.cmd« befindet).
Die Datei »string.xml« enthält benannte Zeichenfolgen. In ihr wird eine Zuordnung des Namens »hello« zur Zeichenfolge »Hello!« festgelegt.
Die Datei »main.xml« ist in dieser Lektion nur ein Platzhalter, der angelegt wird, weil das Skript eine Datei »main.xml« erwartet. Diese Datei »main.xml« wird aber erst in einer späteren Lektion verwendet und erklärt werden.
Vor »<?xml« darf nichts in einer XML-Datei stehen!
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello!</string>
</resources>main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"><TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" /></LinearLayout>
Verwendung der benannten Zeichenfolgen in einem XML -Dokument
Der folgende Auszug aus »main.xml« zeigt, wie die benannte Zeichenfolge in einem XML-Dokument verwendet werden kann, um einen Attributwert festzulegen. Der Attributwert ist »Hello!«, entsprechend der Festlegung des Namens »hello« in der Datei »strings.xml«.
- Auszug
android:text="@string/hello"
Verwendung der benannten Zeichenfolgen in einem Java -Programm
Eine Zeichenfolge, welcher in der XML-Datei »strings.xml« der Namen »X « gegeben wurde, kann nun in einem Java -Programm als »Main.this.activity.getString( R.string.X )« ausgedrückt werden. In dem folgenden Programm wird so die Zeichenfolge »Hello!« als Text eines Textfeldes angezeigt.
MainActivity.java
package com.example;
public final class MainActivity extends android.app.Activity
{ final android.app.Activity activity = this;
final android.content.Context context = this;@java.lang.Override protected final void onCreate
( final android.os.Bundle bundle )
{ super.onCreate( bundle );final android.widget.TextView textView
= new android.widget.TextView( MainActivity.this.context );textView.setText( MainActivity.this.activity.getString( R.string.hello ) );
MainActivity.this.activity.setContentView( textView ); }}
- Quellen
https://developer.android.com/guide/topics/resources/providing-resources.html
http://webcache.googleusercontent.com/search?q=cache:developer.android.com/guide/topics/resources/string-resource.html