W tym laboratorium kodowania utworzysz aplikację na Androida Dice Roller, w której użytkownicy mogą klikać Button, aby rzucać kostką. Wynik rzutu pojawi się na ekranie w TextView.
Aby utworzyć układ aplikacji, użyjesz edytora układu w Android Studio, a następnie napiszesz kod w języku Kotlin, który określi, co się stanie po kliknięciu ikony Button.
Wymagania wstępne
- Jak utworzyć i uruchomić aplikację „Hello, World!” w Android Studio.
- Znasz sposób używania
TextViewsiImageViewsw aplikacji. - Jak modyfikować atrybuty elementu
TextVieww Edytorze układu. - Jak wyodrębnić tekst do zasobu ciągu znaków, aby ułatwić tłumaczenie aplikacji i ponowne wykorzystywanie ciągów znaków.
- podstawy programowania w Kotlinie, które zostały omówione w poprzednich ćwiczeniach;
Czego się nauczysz
- Jak dodać
Buttondo aplikacji na Androida. - Jak dodać działanie, które ma być wykonywane po kliknięciu ikony
Buttonw aplikacji. - Jak otworzyć i zmodyfikować kod
Activityaplikacji. - Jak wyświetlić
Toastkomunikat. - Jak aktualizować zawartość elementu
TextViewpodczas działania aplikacji.
Co utworzysz
- Aplikacja na Androida Dice Roller, która ma przycisk
Buttondo rzucania kostką i aktualizuje tekst na ekranie o wynik rzutu.
Wymagania
- komputer z zainstalowanym Androidem Studio,
Tak będzie wyglądać aplikacja po ukończeniu tego laboratorium.

Tworzenie projektu pustej aktywności
- Jeśli masz już otwarty projekt w Android Studio, kliknij Plik > Nowy > Nowy projekt…, aby otworzyć ekran Utwórz nowy projekt.
- W sekcji Create New Project (Utwórz nowy projekt) utwórz nowy projekt w Kotlinie, korzystając z szablonu Empty Activity (Pusta aktywność).
- Nazwij aplikację „Dice Roller” i ustaw minimalny poziom API na 19 (KitKat).
Ważne: jeśli nie wiesz, jak utworzyć nowy projekt w Android Studio, zapoznaj się ze szczegółami w artykule Tworzenie i uruchamianie pierwszej aplikacji na Androida.

- Uruchom nową aplikację.Powinna wyglądać tak:

Otwieranie edytora układu
- W oknie Project (Projekt) kliknij dwukrotnie
activity_main.xml(app > res > layout > activity_main.xml), aby go otworzyć. Powinien pojawić się Edytor układu, w którym na środku aplikacji znajduje się tylko elementTextView„Hello World”
.
Następnie dodasz do aplikacji Button. Button to element interfejsu użytkownika (UI) w Androidzie, który użytkownik może kliknąć, aby wykonać działanie.

W tym zadaniu dodasz znak Button pod tekstem „Hello World” TextView. Elementy TextView i Button będą się znajdować w elemencie ConstraintLayout, który jest typem elementu ViewGroup.
Gdy w ViewGroup znajdują się Views, są one uznawane za dzieci rodzicaViewGroup.Views W przypadku Twojej aplikacji elementy TextView i Button byłyby uznawane za elementy podrzędne elementu nadrzędnego ConstraintLayout.


Dodaj Button jako dziecko istniejącego ConstraintLayout w aplikacji.
Dodawanie przycisku do układu
- Przeciągnij element
Buttonz palety do widoku Projekt i umieść go pod elementemTextView„Hello World”.
- W sekcji Paleta w drzewie komponentów sprawdź, czy elementy
ButtoniTextViewsą wymienione w sekcjiConstraintLayout(jako elementy podrzędne elementuConstraintLayout). - Wyświetli się błąd informujący, że element
Buttonnie jest ograniczony. Ponieważ elementButtonznajduje się w elemencieConstraintLayout, musisz ustawić ograniczenia pionowe i poziome, aby go umieścić.

Umieść przycisk
W tym kroku dodasz pionowe ograniczenie od góry elementu Button do dołu elementu TextView. Spowoduje to umieszczenie znaku Button pod znakiem TextView.
- W widoku Projekt u góry
Buttonnaciśnij i przytrzymaj białe kółko z niebieską obwódką. Przeciągnij wskaźnik, a za nim pojawi się strzałka. Puść, gdy dotrzesz do dolnej krawędzi napisu „Hello World”TextView. Ustanawia to ograniczenie układu, a elementButtonprzesuwa się w górę tuż pod elementTextView.
- Sprawdź atrybuty po prawej stronie edytora układu.
- W widżecie ograniczeń zobaczysz nowe ograniczenie układu,które jest ustawione na dole elementu
TextView, Top → BottomOf textView (0dp). (0dp) oznacza, że margines wynosi 0. Występuje też błąd dotyczący brakujących ograniczeń poziomych.
- Dodaj ograniczenie poziome od lewej strony elementu
Buttondo lewej strony elementu nadrzędnegoConstraintLayout. - Powtórz to po prawej stronie, łącząc prawą krawędź
Buttonz prawą krawędziąConstraintLayout. Wynik powinien wyglądać tak:

- Gdy
Buttonjest nadal zaznaczony, widżet ograniczeń powinien wyglądać tak. Zwróć uwagę na 2 dodatkowe ograniczenia: Start → StartOf parent (0dp) i End → EndOf parent (0dp). Oznacza to, że elementButtonjest wyśrodkowany poziomo w elemencie nadrzędnymConstraintLayout.
- Uruchom aplikację. Powinna wyglądać jak na zrzucie ekranu poniżej. Możesz kliknąć
Button, ale na razie nic się nie stanie. Kontynuujmy!

Zmiana tekstu przycisku
W edytorze układu wprowadzisz jeszcze kilka zmian w interfejsie.
Zamiast etykiety Button „Przycisk” zmień ją na coś, co wskazuje, co przycisk będzie robić, np. „Rzut”.
- W Edytorze układu, gdy wybrany jest element
Button, kliknij Atrybuty, zmień tekst na Przewiń i naciśnij klawiszEnter(Returnna Macu).

- W drzewie komponentów obok elementu
Buttonpojawi się pomarańczowy trójkąt ostrzegawczy. Jeśli najedziesz wskaźnikiem na trójkąt, pojawi się komunikat. Android Studio wykryło w kodzie aplikacji zakodowany na stałe ciąg znaków („Roll”) i sugeruje użycie zamiast niego zasobu w postaci ciągu znaków.
Zakodowanie ciągu znaków na stałe utrudnia przetłumaczenie aplikacji na inne języki i ponowne użycie ciągów znaków w różnych częściach aplikacji. Na szczęście Android Studio ma automatyczne rozwiązanie tego problemu.

- W drzewie komponentów kliknij pomarańczowy trójkąt.

Otworzy się pełna treść komunikatu ostrzegawczego.

- U dołu wiadomości w sekcji Sugerowana poprawka kliknij przycisk Popraw. Być może trzeba będzie przewinąć stronę w dół.
- Otworzy się okno Wyodrębnij zasób. Wyodrębnienie ciągu znaków oznacza pobranie tekstu „Roll” i utworzenie zasobu tekstowego o nazwie
rollw plikustrings.xml(app > res > values > strings.xml). Wartości domyślne są prawidłowe, więc kliknij OK.

- Zwróć uwagę, że w sekcji Atrybuty atrybut text dla zasobu
Buttonma teraz wartość@string/roll, co odnosi się do utworzonego właśnie zasobu.
W widoku Projekt na elemencie Button powinien nadal być widoczny tekst Przewiń.

Stylizowanie widoku tekstu
Tekst „Hello World!” jest dość mały, a komunikat nie jest istotny dla Twojej aplikacji. W tym kroku zastąpisz mały komunikat „Hello, World!” liczbą, która będzie wyświetlać wartość po rzucie, i powiększysz czcionkę, aby była lepiej widoczna.
- W edytorze projektu wybierz
TextView, aby jego atrybuty pojawiły się w oknie Atrybuty. - Zmień textSize elementu
TextViewna 36sp, aby był duży i łatwy do odczytania. Aby znaleźć textSize, konieczne może być przewinięcie strony.

- Wyczyść atrybut text elementu
TextView. Nie musisz niczego wyświetlać wTextView, dopóki użytkownik nie rzuci kostką.

Jednak podczas edytowania układu i kodu aplikacji bardzo przydatne jest wyświetlanie tekstu w TextView. W tym celu możesz dodać do TextView tekst, który będzie widoczny tylko w podglądzie układu, ale nie podczas działania aplikacji.
.
- Wybierz
TextVieww drzewie komponentów. - W sekcji Atrybuty wspólne znajdź atrybut tekst, a poniżej niego kolejny atrybut tekst z ikoną narzędzia. Atrybut text to tekst, który będzie wyświetlany użytkownikowi podczas działania aplikacji. Atrybut text z ikoną narzędzia to atrybut „tools text” (tekst narzędziowy), który jest przeznaczony tylko dla Ciebie jako programisty.
- Ustaw tekst narzędzi na „1” w
TextView(aby zasymulować rzut kostką z wynikiem 1). Cyfra „1” będzie widoczna tylko w edytorze projektu w Android Studio, ale nie pojawi się, gdy uruchomisz aplikację na rzeczywistym urządzeniu lub w emulatorze.

Pamiętaj, że ten tekst jest widoczny tylko dla deweloperów aplikacji, więc nie musisz tworzyć dla niego zasobu w postaci ciągu znaków.
- Sprawdź aplikację w podglądzie. Wyświetla się „1”.

- Uruchom aplikację. Tak wygląda aplikacja uruchomiona na emulatorze. Cyfra „1” nie jest widoczna. Jest to prawidłowe działanie.

Świetnie, zmiany układu zostały wprowadzone.
Masz aplikację z przyciskiem, ale po jego naciśnięciu nic się nie dzieje. Aby to zmienić, musisz napisać kod w języku Kotlin, który będzie rzucać kostką i aktualizować ekran po naciśnięciu przycisku.
Aby wprowadzić tę zmianę, musisz dowiedzieć się więcej o strukturze aplikacji na Androida.
Activity zapewnia okno, w którym aplikacja rysuje interfejs. Zazwyczaj Activity zajmuje cały ekran uruchomionej aplikacji. Każda aplikacja ma co najmniej 1 aktywność. Działanie najwyższego poziomu lub pierwsze działanie jest często nazywane MainActivity i jest udostępniane przez szablon projektu. Jeśli na przykład użytkownik przewija listę aplikacji na urządzeniu i kliknie ikonę aplikacji „Dice Roller”, system Android uruchomi MainActivity tej aplikacji.
W kodzie MainActivity musisz podać szczegóły dotyczące układu Activity i sposobu, w jaki użytkownik powinien z nim wchodzić w interakcję.
- W aplikacji Birthday Card jest jeden element
Activity, który wyświetla wiadomość i obrazek urodzinowy. - W aplikacji Dice Roller znajduje się 1
Activity, który wyświetla utworzony właśnie układTextViewiButton.
W przypadku bardziej złożonych aplikacji może być wiele ekranów i więcej niż 1 Activity. Każdy Activity ma określone przeznaczenie.
Na przykład w aplikacji galerii zdjęć możesz mieć jeden Activity do wyświetlania siatki zdjęć, drugi Activity do wyświetlania pojedynczego zdjęcia i trzeci Activity do edytowania pojedynczego zdjęcia.

Otwórz plik MainActivity.kt
W pliku MainActivity dodasz kod, który będzie reagować na kliknięcie przycisku. Aby to zrobić prawidłowo, musisz lepiej poznać MainActivitykod, który jest już w aplikacji.
- Otwórz plik
MainActivity.kt(aplikacja > java > com.example.diceroller > MainActivity.kt). Poniżej znajdziesz informacje o tym, co powinno się wyświetlić. Jeśli widzisz ikonęimport..., kliknij ją, aby rozwinąć listę importów....
package com.example.diceroller
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}Nie musisz rozumieć każdego słowa w powyższym kodzie, ale musisz mieć ogólne pojęcie o tym, co on robi. Im więcej będziesz pracować z kodem Androida, tym lepiej go poznasz i zrozumiesz.
- Sprawdź kod Kotlin dla klasy
MainActivity, która jest oznaczona słowem kluczowymclass, a następnie nazwą.
class MainActivity : AppCompatActivity() {
...
}- Zwróć uwagę, że w pliku
MainActivitynie ma funkcjimain().
Wcześniej dowiedzieliśmy się, że każdy program w Kotlinie musi mieć funkcjęmain(). Aplikacje na Androida działają inaczej. Zamiast wywoływać funkcjęmain(), system Android wywołuje metodęonCreate()klasyMainActivity, gdy aplikacja jest otwierana po raz pierwszy. - Znajdź metodę
onCreate(), która wygląda jak poniższy kod.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}Więcej informacji o override znajdziesz w dalszej części ćwiczeń z programowania (więc na razie się tym nie przejmuj). W pozostałej części metody onCreate() konfiguruje się MainActivity za pomocą kodu z importów i ustawia układ początkowy za pomocą setContentView().
- Zwróć uwagę na wiersze zaczynające się od
import.
Android udostępnia framework z wieloma klasami, które ułatwiają pisanie aplikacji na Androida, ale musi dokładnie wiedzieć, o którą klasę Ci chodzi. Za pomocą instrukcji import możesz określić, której klasy w frameworku chcesz użyć w kodzie. Na przykład klasa Button jest zdefiniowana w android.widget.Button.
Włącz automatyczne importowanie
Jeśli używasz większej liczby klas, pamiętanie o dodawaniu instrukcji import może być dość pracochłonne. Na szczęście Android Studio pomaga wybrać prawidłowe importy, gdy używasz klas udostępnionych przez inne osoby. W tym kroku skonfigurujesz Android Studio tak, aby w miarę możliwości automatycznie dodawało importy i usuwało z kodu nieużywane importy.
- W Android Studio otwórz ustawienia, klikając Plik > Inne ustawienia > Ustawienia nowych projektów.
- Rozwiń Inne ustawienia > Automatyczny import. W sekcjach Java i Kotlin upewnij się, że zaznaczone są opcje Add unambiguous imports on the fly (Dodaj jednoznaczne importy na bieżąco) i Optimize imports on the fly (for current project) (Optymalizuj importy na bieżąco (w przypadku bieżącego projektu)). W każdej sekcji znajdują się 2 pola wyboru.

Ustawienia jednoznacznych importów informują Android Studio, aby automatycznie dodawało instrukcję importu, o ile może określić, której instrukcji użyć. Ustawienia optimize imports (optymalizuj importy) informują Androida Studio, aby usuwał wszystkie importy, które nie są używane przez kod. - Zapisz zmiany i zamknij ustawienia, klikając OK.
Teraz, gdy wiesz już trochę więcej o MainActivity, zmodyfikujesz aplikację tak, aby kliknięcie Button powodowało działanie na ekranie.
Wyświetlanie komunikatu po kliknięciu przycisku
W tym kroku określisz, że po kliknięciu przycisku u dołu ekranu ma się wyświetlić krótki komunikat.

- Dodaj ten kod do metody
onCreate()po wywołaniusetContentView(). MetodafindViewById()znajduje elementButtonw układzie.R.id.buttonto identyfikator zasobuButton, który jest jego unikalnym identyfikatorem. Kod zapisuje odwołanie do obiektuButtonw zmiennej o nazwierollButton, a nie sam obiektButton.
val rollButton: Button = findViewById(R.id.button)Kod zapisuje odwołanie do obiektu Button w zmiennej o nazwie rollButton, a nie sam obiekt Button.
Metoda onCreate() powinna teraz wyglądać tak:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.button)
}- Sprawdź, czy Android Studio automatycznie dodało instrukcję
importdlaButton.
Zwróć uwagę, że są teraz 3 instrukcje importu – trzecia została dodana automatycznie.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ButtonNastępnie musisz powiązać kod z elementem Button, aby można było go uruchomić po kliknięciu tego elementu.Button Detektor kliknięć to kod określający, co ma się stać po dotknięciu lub kliknięciu. Można to sobie wyobrazić jako kod, który po prostu „nasłuchuje”, czy użytkownik kliknie w tym przypadku Button.
- Użyj obiektu
rollButtoni ustaw na nim odbiornik kliknięć, wywołując metodęsetOnClickListener().
rollButton.setOnClickListener {
}
Podczas pisania Android Studio może wyświetlać wiele sugestii. W tym przypadku wybierz opcję setOnClickListener {...}.

W nawiasach klamrowych umieść instrukcje dotyczące tego, co ma się stać po kliknięciu przycisku. Na razie aplikacja będzie wyświetlać Toast, czyli krótki komunikat, który pojawi się użytkownikowi.
- Utwórz
Toastz tekstem"Dice Rolled!", wywołującToast.makeText().
val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT)- Następnie poproś
Toasto wyświetlenie się, wywołując metodęshow().
toast.show()Tak wygląda zaktualizowana klasa MainActivity. Instrukcje package i import nadal znajdują się na początku pliku:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.button)
rollButton.setOnClickListener {
val toast = Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT)
toast.show()
}
}
}Możesz połączyć te 2 wiersze w funkcji nasłuchiwania kliknięć w 1 wiersz bez zmiennej. Jest to typowy wzorzec, który możesz znaleźć w innych kodach.
Toast.makeText(this, "Dice Rolled!", Toast.LENGTH_SHORT).show()- Uruchom aplikację i kliknij przycisk Roll (Rzut). U dołu ekranu powinien pojawić się komunikat, który po chwili zniknie.

Hurra! Kliknięcie przycisku spowodowało wyświetlenie wiadomości. To pierwszy raz, gdy piszesz kod w Kotlinie na Androida.
Aktualizowanie widoku TextView po kliknięciu przycisku
Zamiast wyświetlać tymczasowy komunikat Toast, napiszesz kod, który zaktualizuje wartość TextView na ekranie po kliknięciu przycisku Rzuć.
- Wróć do
activity_main.xml(aplikacja > res > layout > activity_main.xml). - Kliknij
TextView. - Zwróć uwagę, że id to textView.

- Otwórz
MainActivity.kt(aplikacja > java > com.example.diceroller > MainActivity.kt) - Usuń wiersze kodu, które tworzą i wyświetlają znak
Toast.
rollButton.setOnClickListener {
}- Zamiast tego utwórz nową zmienną o nazwie
resultTextView, w której będziesz przechowywać wartośćTextView. - Użyj
findViewById(), aby znaleźćtextVieww układzie za pomocą jego identyfikatora i zapisać do niego odwołanie.
val resultTextView: TextView = findViewById(R.id.textView)- Ustaw tekst na
resultTextViewna „6” w cudzysłowie.
resultTextView.text = "6"Jest to podobne do tego, co zostało zrobione podczas ustawiania tekstu w sekcji Atrybuty, ale teraz znajduje się on w kodzie, więc musi być ujęty w cudzysłów. Jawne ustawienie tej wartości oznacza, że na razie TextView zawsze będzie wyświetlać wartość 6. W następnym zadaniu dodasz kod, który będzie rzucać kostką i wyświetlać różne wartości.
Klasa MainActivity powinna wyglądać tak:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val rollButton: Button = findViewById(R.id.button)
rollButton.setOnClickListener {
val resultTextView: TextView = findViewById(R.id.textView)
resultTextView.text = "6"
}
}
}- Uruchom aplikację. Kliknij przycisk. Powinna zaktualizować wartość
TextViewna „6”.

Brakuje tylko rzutu kostką. Możesz ponownie użyć klasy Dice z poprzedniego laboratorium, która obsługuje logikę rzutu kostką.
Dodawanie klasy Dice
- Po ostatnim nawiasie klamrowym w klasie
MainActivityutwórz klasęDicez metodąroll().
class Dice(val numSides: Int) {
fun roll(): Int {
return (1..numSides).random()
}
}- Zwróć uwagę, że Android Studio podkreśla
numSidesfalistą szarą linią. (Może to chwilę potrwać). - Najedź kursorem na ikonę
numSides. Pojawi się wyskakujące okienko z informacją Właściwość „numSides” może być prywatna.
Oznaczenie numSides jako private spowoduje, że będzie ona dostępna tylko w Diceklasie. Ponieważ jedyny kod, który będzie używać numSides, znajduje się w klasie Dice, możesz ustawić argument private dla klasy Dice. Więcej informacji o zmiennych private i public znajdziesz w następnej lekcji.
- Wprowadź sugerowaną poprawkę w Android Studio, klikając Make 'numSides' 'private' (Ustaw „numSides” jako „private”).
Utwórz metodę rollDice()
Po dodaniu klasy Dice do aplikacji zaktualizujesz klasę MainActivity, aby z niej korzystać. Aby lepiej uporządkować kod, umieść całą logikę związaną z rzucaniem kostką w jednej funkcji.
- Zastąp kod w funkcji nasłuchiwania kliknięć, która ustawia tekst na „6”, wywołaniem funkcji
rollDice().
rollButton.setOnClickListener {
rollDice()
}- Ponieważ zmienna
rollDice()nie jest jeszcze zdefiniowana, Android Studio zgłasza błąd i wyświetlarollDice()na czerwono. - Jeśli najedziesz wskaźnikiem myszy na
rollDice(), Android Studio wyświetli problem i kilka możliwych rozwiązań.

- Kliknij Więcej działań..., aby otworzyć menu. Android Studio oferuje więcej możliwości!

- Kliknij Utwórz funkcję „rollDice”. Android Studio tworzy pustą definicję funkcji w
MainActivity.
private fun rollDice() {
TODO("Not yet implemented")
}Tworzenie nowej instancji obiektu Dice
W tym kroku sprawisz, że metoda rollDice() utworzy i rzuci kostką, a następnie wyświetli wynik w TextView.
- W funkcji
rollDice()usuń wywołanieTODO(). - Dodaj kod, aby utworzyć kostkę z 6 oczkami.
val dice = Dice(6)- Rzuć kostką, wywołując metodę
roll(), i zapisz wynik w zmiennej o nazwiediceRoll.
val diceRoll = dice.roll()- Znajdź
TextView, dzwoniąc pod numerfindViewById().
val resultTextView: TextView = findViewById(R.id.textView)Zmienna diceRoll jest liczbą, ale TextView używa tekstu. Możesz użyć metody toString() na diceRoll, aby przekształcić go w ciąg znaków.
- Przekonwertuj
diceRollna ciąg znaków i użyj go do zaktualizowania tekstu elementuresultTextView.
resultTextView.text = diceRoll.toString()Metoda rollDice() wygląda tak:
private fun rollDice() {
val dice = Dice(6)
val diceRoll = dice.roll()
val resultTextView: TextView = findViewById(R.id.textView)
resultTextView.text = diceRoll.toString()
}- Uruchom aplikację. Wynik rzutu kostką powinien się zmienić na inne wartości niż 6. Ponieważ jest to liczba losowa z zakresu od 1 do 6, czasami może się też pojawić wartość 6.

Hurra, jesteś świetny!
To normalne, że po wprowadzeniu zmian w różnych częściach kodu, aby aplikacja działała, kod może wyglądać nieco niechlujnie. Zanim jednak zamkniesz kod, wykonaj kilka prostych czynności porządkowych. Dzięki temu aplikacja będzie w dobrej kondycji i łatwiejsza w utrzymaniu.
Te nawyki są praktykowane przez profesjonalnych programistów Androida podczas pisania kodu.
Przewodnik po stylu Androida
Podczas pracy w zespołach idealnie byłoby, gdyby członkowie zespołu pisali kod w podobny sposób, aby zachować spójność kodu. Dlatego Android ma przewodnik po stylu pisania kodu na Androida – konwencje nazewnictwa, formatowanie i inne sprawdzone metody, których należy przestrzegać. Podczas pisania kodu na Androida przestrzegaj tych wytycznych: Kotlin Style Guide for Android Developers (Przewodnik po stylu Kotlin dla programistów Androida).
Poniżej znajdziesz kilka sposobów na dostosowanie się do przewodnika po stylu.
Oczyść kod
Skracanie kodu
Możesz skrócić kod, zmniejszając liczbę wierszy. Oto na przykład kod, który ustawia odbiornik kliknięć na elemencie Button.
rollButton.setOnClickListener {
rollDice()
}Instrukcje dla odbiornika kliknięć mają tylko 1 wiersz, więc możesz skrócić wywołanie metody rollDice() i nawiasy klamrowe do jednego wiersza. Wygląda to tak: Jeden wiersz zamiast trzech!
rollButton.setOnClickListener { rollDice() }Ponowne formatowanie kodu
Teraz sformatuj kod, aby był zgodny z zalecanymi konwencjami formatowania kodu na Androidzie.
- W klasie
MainActivity.ktzaznacz cały tekst w pliku za pomocą skrótu klawiszowegoControl+Aw systemie Windows (lubCommand+Ana komputerze Mac). Możesz też otworzyć menu w Android Studio i kliknąć Edytuj > Zaznacz wszystko. - Po zaznaczeniu całego tekstu w pliku otwórz menu Android Studio Code > Reformat Code lub użyj skrótu klawiszowego
Ctrl+Alt+L(lubCommand+Option+Lna komputerze Mac).
Spowoduje to zaktualizowanie formatowania kodu, w tym znaków białych, wcięć i innych elementów. Może się okazać, że nie zauważysz żadnych zmian, i to dobrze. Twój kod był już prawidłowo sformatowany.
Komentowanie kodu
Dodaj do kodu komentarze, aby opisać, co się w nim dzieje. W miarę jak kod staje się bardziej skomplikowany, ważne jest też, aby wyjaśnić, dlaczego został napisany w określony sposób. Jeśli wrócisz do kodu później, aby wprowadzić zmiany, działanie kodu może być nadal jasne, ale możesz nie pamiętać, dlaczego został napisany w taki sposób.
Zwykle dodaje się komentarz do każdej klasy (MainActivity i Dice to jedyne klasy w Twojej aplikacji) i każdej napisanej metody. Użyj symboli /** i **/ na początku i na końcu komentarza, aby poinformować system, że nie jest to kod. Te wiersze będą ignorowane podczas wykonywania kodu przez system.
Przykład komentarza do zajęć:
/**
* This activity allows the user to roll a dice and view the result
* on the screen.
*/
class MainActivity : AppCompatActivity() {Przykład komentarza do metody:
/**
* Roll the dice and update the screen with the result.
*/
private fun rollDice() {W metodzie możesz dodawać komentarze, jeśli ułatwi to zrozumienie kodu. Pamiętaj, że na początku komentarza możesz użyć symbolu //. Wszystko, co znajduje się po symbolu // w wierszu, jest traktowane jako komentarz.
Przykład 2 komentarzy w metodzie:
private fun rollDice() {
// Create new Dice object with 6 sides and roll it
val dice = Dice(6)
val diceRoll = dice.roll()
// Update the screen with the dice roll
val resultTextView: TextView = findViewById(R.id.textView)
resultTextView.text = diceRoll.toString()
}- Poświęć trochę czasu na dodanie komentarzy do kodu.
- Po wprowadzeniu wszystkich tych zmian w komentarzach i formatowaniu warto ponownie uruchomić aplikację, aby sprawdzić, czy nadal działa zgodnie z oczekiwaniami.
Zobacz kod rozwiązania, aby dowiedzieć się, jak można było dodać komentarze do kodu.
Kod rozwiązania do tego laboratorium znajduje się w projekcie i module pokazanych poniżej.
Aby pobrać kod do tego laboratorium z GitHuba i otworzyć go w Android Studio, wykonaj te czynności:
- Uruchom Android Studio.
- W oknie Witamy w Android Studio kliknij Check out project from version control (Wyewidencjonuj projekt z systemu kontroli wersji).
- Wybierz Git.
- W oknie Sklonuj repozytorium wklej podany adres URL kodu w polu URL.
- Kliknij przycisk Testuj, poczekaj i sprawdź, czy pojawi się zielony dymek z tekstem Połączenie zostało nawiązane.
- Opcjonalnie zmień katalog na inny niż sugerowany domyślny.
- Kliknij Sklonuj. Android Studio zacznie pobierać Twój kod.
- W wyskakującym okienku Checkout from Version Control (Wyewidencjonuj z kontroli wersji) kliknij Yes (Tak).
- Poczekaj, aż otworzy się Android Studio.
- Wybierz odpowiedni moduł dla kodu początkowego lub rozwiązania codelabu.
- Kliknij przycisk Uruchom
, aby utworzyć i uruchomić kod.
- Dodaj
Buttonw aplikacji na Androida za pomocą edytora układu. - Zmodyfikuj klasę
MainActivity.kt, aby dodać do aplikacji interaktywne działanie. - Wyświetl
Toastkomunikat jako tymczasowe rozwiązanie, aby sprawdzić, czy wszystko jest w porządku. - Ustaw detektor kliknięć dla elementu
Buttonza pomocą funkcjisetOnClickListener(), aby dodać działanie, które ma być wykonywane po kliknięciu elementuButton. - Gdy aplikacja jest uruchomiona, możesz zaktualizować ekran, wywołując metody w
TextView,Buttonlub innych elementach interfejsu w układzie. - Dodaj komentarze do kodu, aby pomóc innym osobom, które go czytają, zrozumieć Twoje podejście.
- Przekształć kod i go uporządkuj.
ButtonzajęciaToastzajęciaTextViewzajęcia- Poradnik stylu dotyczący języka Kotlin dla programistów aplikacji na Androida
Wykonaj te czynności:
- Dodaj do aplikacji kolejną kostkę. Kliknięcie przycisku Rzuć powinno spowodować rzut 2 kostkami. Wyniki powinny być wyświetlane na ekranie w 2 różnych
TextViews.
Sprawdź swoją pracę:
Gotowa aplikacja powinna działać bez błędów i wyświetlać 2 kostki.