Açma/kapatma düğmesi ekle

Oluşturma yöntemini deneyin
Android için önerilen kullanıcı arayüzü araç seti Jetpack Compose'dur. Oluşturma'da nasıl bileşen ekleyeceğinizi öğrenin.

View tabanlı bir düzen kullanıyorsanız açma/kapatma düğmelerini uygulamak için üç temel seçeneğiniz vardır. MaterialComponents kitaplığındaki SwitchMaterial bileşenini kullanmanızı öneririz:

<androidx.constraintlayout.widget.ConstraintLayout 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:padding="16dp">

    <com.google.android.material.switchmaterial.SwitchMaterial
        android:id="@+id/material_switch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/material_switch"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Eski uygulamalar, aşağıdaki örnekte gösterildiği gibi eski SwitchCompat AppCompat bileşenini kullanmaya devam edebilir:

<androidx.constraintlayout.widget.ConstraintLayout 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:padding="16dp">

    <androidx.appcompat.widget.SwitchCompat
        android:id="@+id/switchcompat"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/switchcompat"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Aşağıdaki örnekte, belirgin şekilde farklı bir kullanıcı arayüzüne sahip başka bir eski bileşen olan AppCompatToggleButton gösterilmektedir:

<androidx.constraintlayout.widget.ConstraintLayout 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:padding="16dp">

    <TextView
        android:id="@+id/toggle_button_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toStartOf="@id/toggle"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintBaseline_toBaselineOf="@id/toggle"
        android:text="@string/toggle_button" />

    <androidx.appcompat.widget.AppCompatToggleButton
        android:id="@+id/toggle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/toggle_button_label"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

Bu üç bileşen aynı davranışı sunar ancak farklı görünür. SwitchMaterial ile SwitchCompat arasındaki farklar küçüktür ancak AppCompatToggleButton belirgin şekilde farklıdır:

SwitchMaterial, SwitchCompat ve AppCompatToggleButton denetimleri

Şekil 1. Üç açma/kapatma düğmesi türü.

Durum değişikliklerini işleme

SwitchMaterial, SwitchCompat ve AppCompatToggleButton, CompoundButton sınıfının alt sınıflarıdır. Bu alt sınıflar, kontrol edilmiş durum değişikliklerini ele almak için ortak bir mekanizma sunar. CompoundButton.OnCheckedChangeListener örneğini uygular ve aşağıdaki örnekte gösterildiği gibi düğmeye eklersiniz:

Kotlin

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val binding: SwitchLayoutBinding = SwitchLayoutBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.materialSwitch.setOnCheckedChangeListener { _, isChecked ->
            if (isChecked) {
                // The switch is checked.
            } else {
                // The switch isn't checked.
            }
        }
    }
}

Java

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SwitchLayoutBinding binding = SwitchLayoutBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        binding.materialSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
            if (isChecked) {
                // The switch is checked.
            } else {
                // The switch isn't checked.
            }
        });
    }
}

CompoundButton.OnCheckedChangeListener tek bir soyut yöntem arayüzüdür (veya SAM arayüzü) olduğundan lambda olarak uygulayabilirsiniz. Kontrol edilen durum her değiştiğinde lambda çağrılır ve lambda'ya iletilen isChecked boole değeri, yeni kontrol edilen durumu belirtir.