Labor 2 : Hello, World Plus Ziel Als nächstes werden Sie eine neue Anwendung HelloAndroidPlus erstellen, die eine Erweiterung der Funktionalität der ersten Übung HelloAndroidPrj beinhaltet: Sobald man auf den Knopf drückt, erscheint ein vorgegebener Text in der Texteingabe EditText. In diesem Fall aber werden Sie ein drop-down Menu (in Android die Spinner-Klasse) gebrauchen, um eine Sprache auszuwählen. Diese Sprache sollte auf beide, die Texteingabe und den Knopf, angewendet werden. Z.B. wenn der Benutzer die englische Sprache auswählt, erscheint Click me! auf dem Knopf und der entsprechende Text in der Texteingabe ist in Englisch. 1
Aufgabe 1. Ein drop-down Menü (ein Spinner) wird der Oberfläche zugefügt. 2. Wenn man den Knopf anklickt, erscheint der vorgegebene Text in der Texteingabe. 3. Das drop-down Menü wird zur Auswahl der Sprache benützt. 2
4. Wir haben hier z. B. Französisch ausgewählt. 5. Und jetzt Italienisch. 3
Vorgehen 1. Zuerst einmal genau wie in Übung 1 in Eclipse ein neues Projekt, z.b. HelloAndroidPlus, anlegen, wobei man die Aktivität z. B. HelloAndroidActivity2 nennen kann. 2. Danach können Sie einfach den ganzen Code aus der vorherigen Datei HelloAndroidActivity.java kopieren und in die neue Datei HelloAndroidActivity2.java einfügen, um diese Activity-Klasse dann weiter anzupassen. 3. Um ein Layout wie oben (ausser dem Spinner) anstatt des vom Android System automatisch erstellten zu erhalten, ersetzen Sie den ganzen Inhalt der main.xml Datei mit dem folgenden Code. Beachten Sie, dass oben links auf dem Bildschirm der Text Language: stehen sollte. Dazu müssen Sie die entsprechende Zeichenkette mit ID language_text (siehe Attribut des TextView) in der string.xml Datei definieren. Ferner beachten Sie, dass diesmal die genaue Breite und Höhe des EditText im Layout definiert ist (dip bedeutet density-independent pixel). Im GraphicalLayout-Tabulator können Sie sich die graphische Oberfläche anschauen, wie sie am Bildschirm aussehen wird. Sie können dort z.b. die Grösse oder Position der EditText-Box verändern und sich dann die entsprechend automatischangepasste main.xml Datei im anderen Tabulator anschauen. 4
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dip" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/language_text" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" /> <EditText android:id="@+id/text" android:layout_width="300dip" android:layout_height="70dip" android:inputtype="textshortmessage" /> </LinearLayout> 4. Jetzt müssen Sie nur noch den Spinner zufügen. Lesen Sie dazu den Text http://developer.android.com/guide/tutorials/views/hello-spinner.html, wo genau beschrieben wird, wie man das Layout, die resources und den Code entsprechend modifizieren muss. Sie müssen zuerst einmal die Spinner-Komponente in das Layout in main.xml einfügen. Beachten Sie dabei, dass Sie auf den Spinner zugreifen müssen, d. h. Sie müssen diesem drop-down Menü eine ID zuweisen, die Sie dann im Code gut gebrauchen können. 5. Jetzt brauchen Sie die Zeichenketten, wie Click me! and Hello, World!, in all den verschiedenen Sprachen, die Sie wünschen. Am besten benutzen Sie dazu die sogenannten resource arrays, wie auf der Webseite beschrieben ist: http://developer.android.com/resources/tutorials/views/hello-spinner.html. Tipp: Gebrauchen Sie die folgenden Methoden, um Zeichenketten aus den resources ins Java-Code einzulesen: getresources().getstring(r.string.stringname), für eine einzelne Zeichenkette, getresources().getstringarray(r.array.stringarrayname), für ein Array von Zeichenketten. 6. Und nun können Sie diese Arrays von Zeichenketten dazu gebrauchen, um die einzelnen Elemente des Arrays den verschiedenen Balken des drop-down Menüs zuzuweisen. Beachten Sie dazu, dass die Spinner-Klasse von der AdapterView- Klasse abgeleitet ist. Eine AdapterView ist eine View, die der Anzeige von vielen Datensätzen dient und deren Elemente durch einen sogenannten Adapter mit Daten gefüllt wird. Der Adapter dient somit als ein Bindeglied zwischen einer Datenmenge und einer AdapterView. Wenn Sie eine Zeichenkettenarray als Datenquelle benützen, müssen Sie sich eines ArrayAdapters bedienen, der auf Arrays operiert. Wie auf der oben genannten Webseite gezeigt wird, müssen Sie dem ArrayAdapter 5
noch die gewünschte Layout-Ressource zuweisen, die definiert, wie die drop-down Menü-Elemente dargestellt werden sollen. 7. Die drop-down Menü-Ereignisse müssen aber wahrgenommen werden. Zu diesem Zweck müssen Sie an den Spinner den Event-Handler AdapterView.OnItemSelectedListener setzen, damit die verschiedenen Auswahlereignisse abgearbeitet werden können. spinner_object.setonitemselectedlistener(new AdapterView.OnItemSelectedListener() { public void onitemselected(adapterview<?> adapter, View spinner, int position, long id) { public void onnothingselected(adapterview<?> adapter) { // do nothing 8. Zuletzt müssen Sie die beiden oben gezeigten Methoden implementieren. Zuerst die Methode onitemselected() codieren, die vom Android-System aufgerufen wird, sobald ein gewisses Element des drop-down Menüs ausgewählt wurde. public void onitemselected(adapterview<?> adapter, View spinner,int position, long id) switch (position) { case 0: // language 0 case 1: // language 1 case 2: // language 2... default: // default language Die folgende Methode müssen Sie, genau wie im Tutorial beschrieben, nicht implementieren, da dieser Fall hier nicht eintritt. 6
public void onnothingselected(adapterview<?> adapter) { // do nothing Aufgabe Ergänzen und testen Sie die obigen Applikation im Eclipse. Anmerkungen: Sie brauchen auch in diesem Beispiel die AndroidManifest.xml Datei nicht zu verändern. Wenn Sie im LogCat (in Eclipse auf dem Debug-Tabulator zu finden) protokollieren möchten, können Sie von der Methode Log.i(...,... ) Gebrauch machen; siehe auch http://developer.android.com/reference/android/util/log.html. 7