Czytając Android User Interface Design: Layout Basics zrozumiałem, a właściwie napisano, że layout (układ, rozkład) może oznaczać dwie rzeczy w Androidzie - plik XML z rozkładem elementów wizualnych w katalogu res/layout lub klasę, która odpowiada za pożądany rozkład, odpowiadającej elementowi we wspomnianym pliku XML. Dzięki temu możemy wszystko oprogramować, albo obsłużyć deklaratywnie, wynosząc do pliku XML.
Weźmy na przykład układ formatki, z której korzystam do wprowadzenia lokaty w Lokatniku - res/layout/deposit.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/deposit_name"></TextView> <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content"> <requestfocus></requestFocus> </EditText> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/bank_name"></TextView> <EditText android:id="@+id/editText2" android:layout_height="wrap_content" android:layout_width="161dp"></EditText> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/procent_text"></TextView> <EditText android:id="@+id/editText3" android:layout_height="wrap_content" android:inputType="number" android:layout_width="160dp"></EditText> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/amount_text"></TextView> <EditText android:id="@+id/editText4" android:layout_height="wrap_content" android:inputType="number" android:layout_width="158dp"></EditText> <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/save_label" android:id="@+id/save"></Button> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="@string/discard_label" android:id="@+id/discard"></Button> </LinearLayout> </LinearLayout>Plik układu deposit.xml korzysta z elementu LinearLayout, którego javowym odpowiednikiem jest klasa android.widget.LinearLayout. I tak dla każdego elementu.
Podczas uruchomienia mamy taki oto efekt:
Budowanie układu może być bardzo zajmującym zajęciem, więc warto wesprzeć swoje wysiłki korzystając z dedykowanego edytora w Eclipse ADT - Eclipse layout resource designer (aczkolwiek dochodzą mnie słuchy, że nie jest to najbardziej wyrafinowane, a przez to i pomocne, narzędzie). Dla mnie, do tej pory, narzędzie spełnia pokładane w nim nadzieje i choćby dla celów poznawczych zwykle od niego zaczynam budowanie układu. Poniżej graficzna reprezentacja powyższego pliku XML w edytorze Eclipse.
Z ostatnimi zmianami w aplikacji Lokatnik (dostępna w repo na githubie) przygotowałem sobie przyczułek do zapisu lokat do lokalnej bazy danych, a to oznacza, że nadeszła pora popróbować się z SQLite. Już nie mogę się doczekać!
A może zamiast SQLite może warto rozejrzeć się za innymi rozwiązaniami? Może db4o? Kiedyś pisałeś, że chcesz poznać tą obiekotwą bazę danych. Jak ją wykorzystać na Androidzie masz opisane na moim blogu:
OdpowiedzUsuńhttp://mstachniuk.blogspot.com/2011/05/inne-podejscie-do-przechowywania-danych.html
W razie pytań służę pomocą.
Racja! Tyle naczytałem się o SQLite, że zapomniałem, jak duże wrażenie zrobiła na mnie wzmianka w "Hello, Android" o db4o wspieranej na Androidzie. Dziękuję za przypominajkę.
OdpowiedzUsuńJakim cudem w pliku DepositCreateActivity.java masz publiczną (i jedyną) klasę NewDepositActivity? Co na to kompilator? :)
OdpowiedzUsuń