sobota, 24 września 2011

AndroidPlay - część 2: Hello Android!

Pierwszym programem w książkach czy kursach jest program Hello world, tak też będzie w przypadku tego kursu - napiszemy prostą aplikację, która wypisze na ekranie napis "Hello Android!". Do dzieła!

Tworzymy projekt.
  1. W menu Eclipse wybieramy File > New > Project...
  2. Na liście przechodzimy do folderu Android i wybieramy Android Project.
  3. Uzupełniamy odpowiednie pola: 
  4. Build Target to wersja platformy Android pod którą będzie kompilowany projekt. Musi być mniejsza lub równa wersji platformy używanej przez nasze urządzenie lub AVD (Android Virtual Device).


Do dzieła!

Po utworzeniu projektu widzimy już gotowy kod.
package com.blogspot.pgoralik.androidplay;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
Uruchom program - uwaga, telefon po załadowaniu się na emulatorze trzeba odblokować, to tak na wszelki wypadek, bo można na to nie zwrócić uwagi. Nasuwa się pytanie, skąd ten tekst, który widzimy, przecież w kodzie nic takiego nie ma. Mamy tutaj aktywność HelloAndroidActivity, czyli komponent, z którym w interakcję wchodzi użytkownik, najczęściej poprzez UI (User Interface). W metodzie onCreate(), która wywoływana jest przy tworzeniu aktywności najlepiej utworzyć UI i dokonać potrzebnych inicjalizacji.

Interfejs użytkownika w Androidzie jest połączeniem różnych obiektów wywodzących się z View - klasy reprezentującej podstawowy budulec innych komponentów, takich jak przyciski, statyczne zdjęcia, pola tekstowe itp.

Przeładowana metoda setContentView(int) ustawia graficzny interfejs użytkownika dla aktywności z pliku zasobów (zalecane podejście). Poprzez parametr przyjmuje numer identyfikacyjny (numer ID) zasobu. Klasa R jest generowana automatycznie przez środowisko Eclipse (możemy sobie ją zobaczyć w lewym panelu w folderze HelloAndroid/gen). Zapewnia nam identyfikatory dla plików zasobów.

Układ komponentów jest zdefiniowany w pliku HelloAndroid/res/layout/main.xml - to właśnie identyfikator tego pliku przekazujemy do setContentView(int). Plik wygląda tak:
<?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>

LinearLayout to jeden z kilku możliwych układów - definiują one sposób układania się komponentów. Wartość fill_parent parametrów określających szerokość i wysokość mówi, że mają one dopasować się poprzez wypełnienie rodzica. Tutaj odkrywamy, że komponent TextView ustawia atrybut android:text na "@string/hello", możemy też na sztywno przypisać jakiś ciąg znaków np. "Hello Android!". To pierwsze podejście mówi nam jednak, że odwołujemy się do stringu z zasobów (zalecane podejście - ułatwia lokalizację programu) o nazwie hello, który zdefiniowany jest w HelloAndroid/res/values/strings.xml. Zamieńmy ten string o nazwie hello, żeby przechowywał nasze "Hello Android!", a belka tytułowa programu (app_name) "AndroidPlay - HelloAndroid!"
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello Android!</string>
    <string name="app_name">AndroidPlay - HelloAndroid!</string>
</resources>

Innym sposobem na interfejs użytkownika jest zdefiniowanie i utworzenie go w kodzie. Kod wygląda wtedy tak:
package com.blogspot.pgoralik.androidplay;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroidActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView tv = new TextView(this);
        tv.setText(R.string.hello); // Lub tv.setText("Hello Android!");
        setContentView(tv);
    }
}

W tym przypadku tworzymy obiekt TextView w kodzie, a nie przy użyciu tagów w pliku xml. Konstruktor przyjmuje obiekt Context - uchwyt do systemu. Przekazujemy this, ponieważ nasza klasa dziedziczy po Activity, które z kolei jest klasą wywodzącą się z Context. Metodą setText() ustawiamy text tego komponentu - albo poprzez odniesienie się do zmiennej w zasobach, albo podając normalnie ciąg znaków (wykomentowany przypadek). Tym razem setContentView() to przeładowana metoda, która jako parametr przyjmuje obiekty typu View.

Tak oto otrzymaliśmy niewielkim nakładem siły nasz pierwszy program. Tak się prezentuje:



<< Poprzednia lekcja Następna lekcja >>
Materiały do pobrania:

Brak komentarzy:

Prześlij komentarz