Dodaj przyciski do aplikacji

Wypróbuj Compose
Jetpack Compose to zalecany zestaw narzędzi do tworzenia interfejsu na Androidzie. Dowiedz się, jak dodawać komponenty w Compose.

Przycisk składa się z tekstu lub ikony albo z obu tych elementów. Informuje o tym, jakie działanie zostanie wykonane, gdy użytkownik go kliknie.

Przycisk w układzie możesz utworzyć na 3 sposoby, w zależności od tego, czy chcesz, aby zawierał tekst, ikonę czy oba te elementy:

  
  <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 coś takiego:

Ilustracja przedstawiająca 3 typy przycisków
Rysunek 1. 3 style przycisków.

Reagowanie na zdarzenia kliknięcia

Gdy użytkownik kliknie przycisk, obiekt Button otrzyma zdarzenie on-click.

Aby zadeklarować programowo obsługę zdarzeń, utwórz obiekt View.OnClickListener i przypisz go do przycisku, wywołując 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");
    }
});

Stylizowanie przycisku

Wygląd przycisku – obraz tła i czcionka – różni się w zależności od urządzenia, ponieważ urządzenia różnych producentów często mają różne style domyślne elementów sterujących.

Aby dostosować poszczególne przyciski za pomocą innego tła, określ atrybut android:background za pomocą zasobu rysowalnego lub koloru. Możesz też zastosować styl przycisku, który działa podobnie jak style HTML, aby zdefiniować 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

Przydatnym rozwiązaniem może być przycisk „bez obramowania”. Przyciski bez obramowania przypominają zwykłe przyciski, ale nie mają obramowania ani tła. Zmieniają jednak 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 całkowicie zmienić wygląd przycisku, możesz określić niestandardowe tło. Zamiast prostego bitmapy lub koloru tło musi być jednak zasobem listy stanów, który zmienia wygląd w zależności od bieżącego stanu przycisku.

Listę stanów możesz zdefiniować w pliku XML, który określa 3 obrazy lub kolory do użycia w różnych stanach przycisku.

Aby utworzyć obiekt rysowalny listy stanów na potrzeby tła przycisku:

  1. Utwórz 3 bitmapy na potrzeby tła przycisku, które będą reprezentować stany domyślny, kliknięty i aktywny przycisku. Aby mieć pewność, że obrazy będą pasować do przycisków o różnych rozmiarach, utwórz bitmapy jako bitmapy 9-patch.
  2. Umieść bitmapy w katalogu res/drawable/ projektu. Nazwij każdą bitmapę tak, aby odzwierciedlała stan przycisku, który reprezentuje, 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ę, np. button_custom.xml. Wstaw kod XML podobny do tego:
    <?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 on pojedynczy obiekt rysowalny, który zmienia obraz w zależności od bieżącego stanu przycisku.

    • Pierwszy <item> określa bitmapę, która ma być używana, gdy przycisk jest kliknięty (aktywny).
    • Drugi <item> określa bitmapę, która ma być używana, gdy przycisk jest aktywny, np. gdy jest podświetlony za pomocą trackballa lub pada kierunkowego.
    • Trzeci <item> określa bitmapę, która ma być używana, gdy przycisk jest w stanie domyślnym , czyli nie jest kliknięty ani aktywny.

    Ten plik XML reprezentuje pojedynczy obiekt rysowalny. Gdy jest on przywoływany przez Button jako tło, wyświetlany obraz zmienia się w zależności od stanu przycisku.

  4. Zastosuj plik XML rysowalnego elementu 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.