Programowanie Aplikacji Mobilnych
Materiały do zajęć laboratoryjnych
mgr inż.
Kamil Zieliński
Katolicki Uniwersytet Lubelski Jana Pawła II w Lublinie
2020/2021
Spis treści
1. Android Studio – podstawy ... 3
2. Struktura projektu ... 6
3. Tworzenie wyglądu aktywności ... 7
4. Podstawy obsługi zdarzeń ... 11
5. Definiowanie treści tekstu ... 12
1. Android Studio – podstawy
Przed przystąpieniem do pracy nad aplikacjami dla systemu Android, konieczne jest przygotowanie środowiska developerskiego. Składa się ono z:
• Android Studio
• Android SDK
Android Studio można pobrać ze strony https://developer.android.com/studio/. Jest to darmowe narzędzie developerskie. Podczas instalacji konieczne jest połączenie z Internetem, ponieważ pobierane będą dodatkowe komponenty. Po pozytywnym zakończeniu procesu instalacji, można przejść do tworzenia nowego projektu. Uruchomienie Android Studio będzie skutkowało wyświetleniem okna powitalnego:
Najważniejsze funkcje, dostępne na ekranie powitalnym to rozpoczęcie nowego projektu (Start a new Android Studio project) oraz utworzenie projektu ze źródeł systemu kontroli wersji.
Po wybraniu jednej z opcji, wyświetlone zostanie okno, w którym należy wybrać szablon aplikacji. Szablony podzielone są na grupy – zależnie od urządzenia docelowego (telefon, zegarek, telewizor, pojazd, rozwiązanie wbudowane). Wybierzmy opcję Empty Activity z zakładki Phone and Tablet. W następnym kroku należy dokonać szczegółowej konfiguracji projektu.
W polu Name należy wpisać nazwę projektu. Konieczne jest też wskazanie lokalizacji, w której zostaną zapisane źródła aplikacji.
Pole Save location przeznaczone jest na wskazanie ścieżki zapisu projektu.
W polu Minimum SDK należy wskazać mininalne API, dla jakiego będzie przygotowywana aplikacja. Zadeklarowanie API 15 spowoduje, iż aplikacja nie będzie mogła uruchomić się na urządzeniu posiadającym starszą wersję systemu. Jednocześnie należy pamiętać, iż każda kolejna wersja API wprowadzała nowe funkcjonalności.
Pole language pozwala na wybranie języka (Kotlin lub Java) projektu.
Po wybraniu przycisku Finish wyświetlone zostanie okno projektu.
2. Struktura projektu
Struktura projektu w Android Studio przedstawiona została na poniższym rysunku.
• Plik manifest zawiera najważniejsze informacje o aplikacji
• Znajdują się tam takie parametry jak ikona, która będzie wyświetlana po zainstalowaniu aplikacji, domyślny wygląd aplikacji, wykorzystywane sdk czy deklaracje uprawnień
• Katalog java – klasy Javove (lub Kotlinowe), w tym aktywności
• Katalog res – zasoby programowanej aplikacji
• drawable – grafiki wykorzystywane w aplikacji
• layout – wygląd aktywności
• mipmap – ikony do uruchamiania aplikacji
• values – pliki dodatkowe, np. ciągi znakowe z aplikacji
Za wygląd aplikacji odpowiadają pliki xml, znajdujące się w katalogu res/layout.
3. Tworzenie wyglądu aktywności
Podczas tworzenia wyglądu aktywności w systemie Android, wykorzystywane layouty.
Layout deklaruje ułożenie elementów w jego wnętrzu. Można wyróżnić kilka różnych layoutów. Do najważniejszych nalezą:
LinearLayout (horizontal) – układ liniowy, w którym kolejne elementy stanowią nowe kolumny LinearLayout(vertical) – układ liniowy, w którym kolejne elementy stanowią nowe wiersze RelativeLayout – układ, w którym pozycja elementów definiowana jest względem inne elementu.
Layouty mogą się zagnieżdżać. Przygotujmy layout, w którym znajdzie się kilka wierszy, pozwalających na wprowadzenie danych studenta oraz średniej jego ocen.
Przygotowanie tego prostego layoutu, spowoduje wygenerowanie dużej ilości kodu:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.myapplication.MainActivity">
<LinearLayout
android:layout_width="368dp"
android:layout_height="495dp"
android:orientation="vertical"
tools:layout_editor_absoluteX="13dp"
tools:layout_editor_absoluteY="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textVieName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Name" />
<EditText
android:id="@+id/editTextName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:text="Input name" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textViewSurname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Surname" />
<EditText
android:id="@+id/editTextSurname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Input surname" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textViewSubject"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Subject" />
<EditText
android:id="@+id/editTextSubject"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
android:text="Input subject" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="4.48"
android:text="Average grade" />
<EditText
android:id="@+id/editText12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="numberDecimal"
android:text="Input avarage grade" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="15dp">
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.78"
android:text="Result:" />
<TextView
android:id="@+id/textView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1.12"
android:text="none" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="20dp">
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Check" />
</LinearLayout>
</LinearLayout>
</android.support.constraint.ConstraintLayout>
Można zauważyć, iż w deklaracji wyglądu, wielokrotnie wykorzystywane są parametry
„match_parent” oraz „wrap_content”. Pierwszy z nich określa, iż dany elementu GUI ma dopasowywać się swoją zawartością do elementu, w którym się znajduje. Drugi z kolei, iż punktem odniesienia jest zawartość elementu.
4. Podstawy obsługi zdarzeń
Każdy przycisk może otrzymać właściwość onClick. Pozwala ona na wprowadzenie nazwy metody, która zostanie wywołana po wciśnięciu przycisku. Napiszmy metodę, która pobierze wysokość średniej i określi, czy student otrzymał stypendium. Metodę należy napisać w klasie, która jest powiązana z widokiem.
public void check(View v) {
EditText grade = (EditText)findViewById(R.id.editTextAvGrade);
TextView result = (TextView)findViewById(R.id.textViewResult);
double avGrade = Double.valueOf(grade.getText().toString());
if (avGrade < 4.5) {
result.setText("Scholarship: false :(");
} else {
result.setText("Scholarship: true! :)!");
} }
Powiązanie przycisku z metodą:
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Check"
android:onClick="check"/>
5. Definiowanie treści tekstu
W poprzednich przykładach tekst wyświetlany w widoku, deklarowany był bezpośrednio w pliku xml. Android pozwala na zadeklarowanie wszystkich stringów poza layoutem aktywności. Przeznaczony jest do tego plik strings.xml, znajdujący się w katalogu res.
<resources>
<string name="app_name">My Application</string>
<string name="name">Name</string>
<string name="surname">Surname</string>
<string name="result">Result:</string>
</resources>
Połączenie elementu aktywności z treścią tekstu wygląda następująco:
<TextView
android:id="@+id/textView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.78"
android:text="@string/result" />
Od tego momentu, zmiana treści w pliku strings.xml, spowoduje zmianę we wszystkich elementach, powiązanych z daną nazwą stringa.
Zadania do samodzielnego wykonania:
• Zmodyfikuj kod aplikacji tak, by w kolejnych liniach wyświetlono komunikat: student imie nazwisko (wartości wprowadzone przez użytkownika) z kierunku kierunek otrzymał / nie otrzymał stypendium.
• Zmodyfikuj kod tak, by wszystkie komunikaty znalazły się w pliku strings.xml.
• Przygotuj aplikację pozwalającą na wykonanie 4 podstawowych operacji arytmetycznych dla 2 wprowadzonych przez użytkownika liczb. Przygotuj odpowiedni layout. Zadbaj o to, by komunikaty znalazły się w pliku strings.xml.