Dodaj przyciski do aplikacji

Wypróbuj sposób tworzenia wiadomości
Jetpack Compose to zalecany zestaw narzędzi UI na Androida. Dowiedz się, jak dodawać komponenty w oknie tworzenia wiadomości

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:

Obraz przedstawiający 3 rodzaje przycisków
Rysunek 1. Trzy style przycisków.

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:

  1. 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.
  2. 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 i button_focused.9.png.
  3. Utwórz nowy plik XML w katalogu res/drawable/. Nadaj mu nazwę podobną do button_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.

  4. 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.