Obsługa klawiszy
W niniejszym temacie w proponowanych kodach pojawi się słowo kluczowe val. Kotlin używa dwóch różnych słów kluczowych do deklaracji zmiennych
val dla zmiennej, której wartość nigdy się nie zmienia
var dla zmiennej, której wartość może się zmienić
Układ komponentów
W tworzonym widoku aktywności umieść jedna kontrolkę typu TextView i trzy kontrolki Button. Poniżej proponowany układ.
Deklaracja funkcji
Kod funkcji zamykającej aplikację w systemie android napisanej w języku Kotlin
Wskazówka:
fun Zamknij(){
finish();
System.exit(0);
}
W oknie edycji układu aktywności zaznaczamy komponent klawisza (krok 1). Przechodzimy do zakładki Attributes (krok 2). Rozwijamy listę Common Attributes (krok 3). Szukamy pola metody onClick i wpisujemy nazwę naszej funkcji (krok 4). Patrz poniższa ilustracja.
Metoda druga: Wykorzystanie setOnClickListener
Funkcja setOnClickListener jest popularnie zwana słuchaczem przycisków. Kod słuchacza deklaruje się w metodzie onCreate() tworzonego widoku aktywności.
Wywołanie jednej lub zestawu instrukcji po kliknięciu w przycisk wymaga wykonania następujących kroków:
- uzyskaj odwołanie do przycisku (wymaga wcześniejszego zaimportowania biblioteki (import android.widget.Button)
- wywołaj funkcję setOnClickListener() w odniesieniu do przycisku
- zapisz zestaw instrukcji w bloku funkcyjnym setOnClickListener
Tak utworzony blok kodu w funkcji setClickListener jest wykonywany po dotknięciu przycisku.
Typowa składnia wywołania metody setOnClickListener() na przycisku to:
Wskazówka:
val button = findViewById<Button>(R.id.button_id)
button.setOnClickListener {
//zbiór instrukcji do wykonania
}
Kod naszego rozwiązania
Wskazówka:
package pl.epomoce.klawiszzamknij
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
class OknoGlowne : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_okno_glowne)
val button2 = findViewById<Button>(R.id.button2)
button2.setOnClickListener {
Zamknij();
}
}
fun Zamknij(){
finish();
System.exit(0);
}
}
Skompiluj program i sprawdź jego działanie.
Metoda trzecia: Wykorzystanie biblioteki funkcji z zewnętrznej klasy
Dbając o porządek (ład) w plikach projektu zbiory funkcji, które mogą być wywoływane w różnych aktywnościach (oknach) tego samego projektu, można przechowywać w jednej osobnej klasie. Odwołanie do tak przechowywanych funkcji, będzie wymagać deklaracji zmiennej do klasy w bieżącej aktywności. Następnie wykorzystując zmienną do klasy funkcji, uzyskamy dostęp do jej metod.
Tworzymy klasę do definiowania naszych funkcji. Kliknij prawym przyciskiem myszki w drzewie projektu, wybierz New/ Kotlin Class
Nadajemy nazwę naszej klasie. Ja nadałem: MojeFunkcje.
W pliku utworzonej klasy zadeklaruj funkcje zamykającą okno aktywności. Funkcję utwórz z argumentem do aktywności aplikacji. Pozwoli to zamykać aplikację z dowolnej aktywności tworzonego projektu.
Wskazówka:
package pl.epomoce.klawiszzamknij
import androidx.appcompat.app.AppCompatActivity
class MojeFunkcje {
public fun Zamknij(aktywnosc:AppCompatActivity){
aktywnosc.finish();
System.exit(0);
}
}
Przechodzimy do pliku klasy aktywności i deklarujemy zmienną do utworzonej klasy z funkcjami
Wskazówka:
class OknoGlowne : AppCompatActivity() {
val mojeFunkcje=MojeFunkcje()
override fun onCreate(savedInstanceState: Bundle?) {
W metodzie onCreate() piszemy kod słuchacza dla trzeciego przycisku. Zauważ, jak podano argument do aktywności aplikacji (słowo kluczowe this)
Wskazówka:
//kod słuchacza dla przycisku Button3
val button3 = findViewById<Button>(R.id.button3)
button3.setOnClickListener {
mojeFunkcje.Zamknij(this);
}
Skompiluj program i sprawdź jego działanie.
Kliknięcia w obiekty inne niż Button
Kliknięcia mogą być rejestrowane nie tylko na komponencie przycisku (Button). Do każdego obiektu występującego w widoku aktywności można rejestrator kliknięć. W poniższym przykładzie utworzymy licznik kliknięć w komponent typu TextView.
W utworzonej klasie zbioru funkcji dopiszemy funkcję zliczającą kliknięcia.
Wskazówka:
package pl.epomoce.klawiszzamknij
import androidx.appcompat.app.AppCompatActivity
class MojeFunkcje {
public fun Licznik(i:Int):Int{
return i+1
}
public fun Zamknij(aktywnosc:AppCompatActivity){
aktywnosc.finish();
System.exit(0);
}
}
W pliku klasy aktywności okna głównego deklarujemy zmienną do przechowywania ilości kliknięć. Przy deklaracji używamy słowa kluczowego var (bo wartość zmiennej może się zmieniać)
Wskazówka:
class OknoGlowne : AppCompatActivity() {
val mojeFunkcje=MojeFunkcje()
var i=0;
override fun onCreate(savedInstanceState: Bundle?) {
Dopisujemy słuchacza do zliczeń klikania.
Wskazówka:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_okno_glowne)
//kod słuchacza dla przycisku Button2
val button2 = findViewById<Button>(R.id.button2)
button2.setOnClickListener {
Zamknij()
}
//kod słuchacza dla przycisku Button3
val button3 = findViewById<Button>(R.id.button3)
button3.setOnClickListener {
mojeFunkcje.Zamknij(this)
}
//kod słuchacza dla TextView
val textView=findViewById<TextView>(R.id.textView)
textView.setOnClickListener {
i=mojeFunkcje.Licznik(i)
textView.setText("Licznik kliknięć: " + i)
}
}
Skompiluj program i sprawdź jego działanie.
Kolejne kliknięcia w kontrolkę TextView są rejestrowane i wysyłane do jej zawartości przy uzyciu metody setText().
Pełny kod pliku głównej aktywności
Wskazówka:
package pl.epomoce.klawiszzamknij
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView
class OknoGlowne : AppCompatActivity() {
val mojeFunkcje=MojeFunkcje()
var i=0;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_okno_glowne)
//kod słuchacza dla przycisku Button2
val button2 = findViewById<Button>(R.id.button2)
button2.setOnClickListener {
Zamknij()
}
//kod słuchacza dla przycisku Button3
val button3 = findViewById<Button>(R.id.button3)
button3.setOnClickListener {
mojeFunkcje.Zamknij(this)
}
//kod słuchacza dla TextView
val textView=findViewById<TextView>(R.id.textView)
textView.setOnClickListener {
i=mojeFunkcje.Licznik(i)
textView.setText("Licznik kliknięć: " + i)
}
}
fun Zamknij(){
finish();
System.exit(0);
}
}
Pełny kod pliku klasy zbioru funkcji
Wskazówka:
package pl.epomoce.klawiszzamknij
import androidx.appcompat.app.AppCompatActivity
class MojeFunkcje {
public fun Licznik(i:Int):Int{
return i+1
}
public fun Zamknij(aktywnosc:AppCompatActivity){
aktywnosc.finish();
System.exit(0);
}
}