Ćwiczenie 7 Wykorzystanie układu LinearLayout Cel ćwiczenia Celem ćwiczenia jest praktyczne zapoznanie się z zasadami użycia układu graficznego LinearLayout oraz wykształcenie umiejętności zastosowania tego układu do tworzenia interfejsu użytkownika. Zakres ćwiczenia obejmuje definiowanie układu LinearLayout i umieszczanie w nim kontrolek dziedziczących po klasie View (m.in. TextView, EditText, Button, CheckBox, RadioGroup, RadioButton, DatePicker, TimePicker, Toast). Przygotowanie się do ćwiczenia Zapoznać się z wykładem Interfejs użytkownika układy. Zapoznać się z hierarchią klas układów graficznych. Przestudiować opis dotyczący układu LinearLayout. Powtórzyć wiadomości dotyczące kontrolek wykorzystywanych na dotychczasowych ćwiczeniach. Na podstawie dokumentacji Android SDK: http://developer.android.com/reference/packages.html zapoznać się w podstawowym zakresie z klasami LinearLayout, DatePicker, TimePicker. Zapoznać się z przykładową aplikacją zamieszczoną w opisie ćwiczenia. Przeanalizować kod źródłowy aplikacji. Zadania do wykonania 1. Uruchomić przykładową aplikację zamieszczoną w opisie ćwiczenia i przetestować jej działanie. 2. Zmodyfikować przykładową aplikację omawianą w ćwiczeniu w taki sposób, aby data urodzenia wprowadzana była w polach EditText. Dodać więcej pól wyboru CheckBox dla zainteresowań ankietowanego. Zastosować zagnieżdżone układy LinearLayout w taki sposób, aby optymalnie wykorzystać obszar ekranu. 3. Napisać aplikację, która umożliwia wprowadzenie daty kalendarzowej jako danej wejściowej (DatePicker). Aplikacja powinna wyświetlić na ekranie zestaw pól wyboru (CheckBox) i na podstawie wprowadzonej przez użytkownika daty powinna określić (w zależności od ustawień pól wyboru): porę roku, znak zodiaku osoby urodzonej danego dnia. Do wyświetlania wyników wykorzystać obiekty klasy TextView. Zastosować zagnieżdżone układy LinearLayout. Strona 1
Przykładowa aplikacja plik Projekt4Activity.java package org.przyklad; import android.app.activity; import android.os.bundle; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.checkbox; import android.widget.datepicker; import android.widget.edittext; import android.widget.radiobutton; import android.widget.toast; public class Projekt4Activity extends Activity implements OnClickListener private RadioButton rb1, rb2; private EditText et1, et2; private DatePicker dp; private CheckBox chk1, chk2, chk3; private Button btn1, btn2; @Override public void oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.main); rb1 = (RadioButton) this.findviewbyid(r.id.radio0); rb2 = (RadioButton) this.findviewbyid(r.id.radio1); rb1.setonclicklistener(this); rb2.setonclicklistener(this); et1 = (EditText) this.findviewbyid(r.id.edittext1); et2 = (EditText) this.findviewbyid(r.id.edittext2); dp = (DatePicker) this.findviewbyid(r.id.datepicker1); chk1 = (CheckBox) this.findviewbyid(r.id.checkbox1); chk2 = (CheckBox) this.findviewbyid(r.id.checkbox2); chk3 = (CheckBox) this.findviewbyid(r.id.checkbox3); chk1.setonclicklistener(this); chk2.setonclicklistener(this); chk3.setonclicklistener(this); btn1 = (Button) this.findviewbyid(r.id.button1); btn2 = (Button) this.findviewbyid(r.id.button2); btn1.setonclicklistener(this); btn2.setonclicklistener(this); public void onclick(view v) switch (v.getid()) case R.id.button1: wczytaj(); break; case R.id.button2: this.finish(); break; Strona 2
private void wczytaj() CharSequence imie = (CharSequence) et1.gettext(); CharSequence nazwisko = (CharSequence) et2.gettext(); int r = dp.getyear(); int m = dp.getmonth()+1; // miesiące liczone od 0 int d = dp.getdayofmonth(); String s = (rb1.ischecked()? "Pan " : "Pani ") + imie.tostring() + ' ' + nazwisko.tostring(); s = s + "\nurodz. " + r + '-' + m + '-' + d + "\nzainteresowania: "; if (chk1.ischecked()) s = s + chk1.gettext().tostring() + ", "; if (chk2.ischecked()) s = s + " " + chk2.gettext().tostring() + ", "; if (chk3.ischecked()) s = s + chk3.gettext().tostring(); Toast toast = Toast.makeText(Projekt4Activity.this, s, Toast.LENGTH_LONG); toast.show(); Przykładowa aplikacja plik main.xml Zwrócić uwagę na sposób definiowania układu LinearLayout. <?xml version="1.0" encoding="utf-8"?> xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="fill_parent" android:orientation="vertical" > <RadioGroup android:id="@+id/radiogroup1" android:orientation="horizontal" > <RadioButton android:id="@+id/radio0" android:checked="true" android:text="@string/rb1tekst" /> <RadioButton android:id="@+id/radio1" android:text="@string/rb2tekst" /> </RadioGroup> android:id="@+id/linearlayout1" > android:id="@+id/textview1" android:text="@string/tv1tekst" /> <EditText android:id="@+id/edittext1" android:inputtype="textpersonname" > </EditText> Strona 3
android:id="@+id/linearlayout2" > android:id="@+id/textview2" android:text="@string/tv2tekst" /> <EditText android:id="@+id/edittext2" android:inputtype="textpersonname" /> android:id="@+id/textview3" android:layout_gravity="center_horizontal" android:text="@string/tv3tekst" /> <DatePicker android:id="@+id/datepicker1" android:layout_gravity="center_horizontal" /> android:id="@+id/checkbox1" android:text="@string/chk1tekst" /> android:id="@+id/checkbox2" android:text="@string/chk2tekst" /> android:id="@+id/checkbox3" android:text="@string/chk3tekst" /> android:id="@+id/linearlayout3" android:orientation="horizontal" > <Button android:id="@+id/button1" android:text="@string/btn1tekst" /> <Button android:id="@+id/button2" android:text="@string/btn2tekst" /> Strona 4
Wygląd interfejsu użytkownika zdefiniowanego w pliku main.xml Przykładowa aplikacja plik strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">ankieta osobowa</string> <string name="tv1tekst">imię:</string> <string name="tv2tekst">nazwisko: </string> <string name="tv3tekst">data urodzenia:</string> <string name="tv4tekst">zainteresowania:</string> <string name="rb1tekst">mężczyzna</string> <string name="rb2tekst">kobieta</string> <string name="btn1tekst">wczytaj</string> <string name="btn2tekst">zakończ</string> <string name="chk1tekst">film</string> <string name="chk2tekst">literatura</string> <string name="chk3tekst">muzyka</string> </resources> Strona 5