Przycisk składa się z tekstu lub ikony (albo obu tych elementów), który informuje o działaniu po kliknięciu przycisku przez użytkownika.
Przycisk możesz utworzyć w układzie na jeden z trzech sposobów w zależności od tego, czy chodzi o przycisk z tekstem, ikoną czy obydwoma:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingRight="16dp" android:orientation="vertical" > <Button android:id="@+id/supabutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="I'm a button" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="A tiny Android icon" android:src="@drawable/baseline_android_24" app:tint="#ff0000" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:drawableStart="@drawable/baseline_android_24" android:drawablePadding="4dp" android:drawableTint="#ff0000" android:text="I'm a button with an icon" /> </LinearLayout>
Poprzedni kod generuje mniej więcej coś takiego:
Reagowanie na zdarzenia kliknięcia
Gdy użytkownik kliknie przycisk, obiekt Button
otrzyma zdarzenie kliknięcia.
Aby zadeklarować moduł obsługi zdarzeń automatycznie, utwórz obiekt View.OnClickListener
i przypisz go do przycisku, wywołując metodę setOnClickListener(View.OnClickListener)
, jak w tym przykładzie:
Kotlin
findViewById<Button>(R.id.supabutton) .setOnClickListener { Log.d("BUTTONS", "User tapped the Supabutton") }
Java
Button button = (Button) findViewById(R.id.supabutton); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Log.d("BUTTONS", "User tapped the Supabutton"); } });
Określanie stylu przycisku
Wygląd przycisku (obraz tła i czcionka) może się różnić w zależności od urządzenia, bo urządzenia różnych producentów mają często różne domyślne style elementów sterowania wejściami.
Aby dostosować poszczególne przyciski na innym tle, podaj atrybut android:background
za pomocą zasobu, który można rysować lub koloru. Możesz też zastosować styl przycisku, który działa podobnie do stylów HTML, by definiować wiele właściwości stylu, takich jak tło, czcionka i rozmiar. Więcej informacji o stosowaniu stylów znajdziesz w artykule Style i motywy.
Przycisk bez obramowania
Przydatny jest na przykład przycisk „Bez obramowania”. Przyciski bez obramowań przypominają podstawowe przyciski, ale nie mają obramowania ani tła, ale zmieniają wygląd w różnych stanach, np. po kliknięciu.
Aby utworzyć przycisk bez obramowania, zastosuj do niego styl borderlessButtonStyle
, jak w tym przykładzie:
<Button android:id="@+id/supabutton" style="?android:attr/borderlessButtonStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="I'm a button" />
Tło niestandardowe
Jeśli chcesz naprawdę zmienić wygląd przycisku, możesz wybrać niestandardowe tło. Zamiast jednak udostępniać prostą bitmapę lub kolor, tło musi być zasobem listy stanów, który zmienia wygląd w zależności od bieżącego stanu przycisku.
Listę stanów przycisku możesz zdefiniować w pliku XML, który określa 3 obrazy lub kolory na potrzeby poszczególnych stanów przycisku.
Aby utworzyć rysowalną listę stanów dla tła przycisku:
- Utwórz 3 mapy bitowe dla tła przycisku, które reprezentują domyślny, kliknięty i aktywny stan przycisku. Aby mieć pewność, że obrazy pasują do przycisków o różnych rozmiarach, utwórz mapy bitowe jako dziewięcioma poprawki.
- Umieść mapy bitowe w katalogu
res/drawable/
swojego projektu. Nazwij każdą bitmapę zgodnie ze stanem przycisku, np.button_default.9.png
,button_pressed.9.png
ibutton_focused.9.png
. - Utwórz nowy plik XML w katalogu
res/drawable/
. Nadaj mu nazwę podobną dobutton_custom.xml
. Wstaw kod XML w ten sposób:<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/button_pressed" android:state_pressed="true" /> <item android:drawable="@drawable/button_focused" android:state_focused="true" /> <item android:drawable="@drawable/button_default" /> </selector>
Definiuje jeden rysowalny zasób, który zmienia swój obraz w zależności od bieżącego stanu przycisku.
- Pierwsza
<item>
określa bitmapę, która ma być używana po kliknięciu przycisku (aktywowaniu). - Drugie
<item>
określa bitmapę, która ma być używana, gdy przycisk jest zaznaczony, np. gdy przycisk jest podświetlany za pomocą kulki lub pada kierunkowego. - Trzeci element
<item>
określa bitmapę, która ma być używana, gdy przycisk znajduje się w stanie domyślnym – nie jest on kliknięty ani zaznaczony.
Ten plik XML reprezentuje jeden zasób, który można rysować. Jeśli odwołuje się
Button
do tła, wyświetlany obraz zmienia się w zależności od stanu przycisku. - Pierwsza
- Zastosuj rysowalny plik XML jako tło przycisku:
<Button android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send" android:onClick="sendMessage" android:background="@drawable/button_custom" />
Więcej informacji o tej składni XML, w tym o tym, jak zdefiniować przycisk, który jest wyłączony, najechany lub w innym stanie, znajdziesz w artykule StateListDrawable
.