28 września 2011

Układ w Androidzie - jedno słowo, dwa znaczenia

Trafiłem na pokaźne źródło wiedzy nt. Androida - serwis mobiletuts+, a tam trzy serie artykułów - Android User Interface Design, Android Fundamentals oraz Android Essentials. Poza tym wiele dodatkowych artykułów spoza tych serii, a wszystkie wydają się być pisane zrozumiale i przede wszystkim zwięźle. Wszystko jedynie za koszt Twojego czasu.

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ć!