टॉगल बटन जोड़ना

लिखने का तरीका आज़माएं
Android के लिए, Jetpack Compose हमारा सुझाया गया यूज़र इंटरफ़ेस (यूआई) टूलकिट है. Compose में कॉम्पोनेंट जोड़ने का तरीका जानें.

अगर View-आधारित लेआउट का इस्तेमाल किया जा रहा है, तो टॉगल लागू करने के लिए तीन मुख्य विकल्प हैं. हमारा सुझाव है कि आप मटीरियल कॉम्पोनेंट लाइब्रेरी में मौजूद SwitchMaterial कॉम्पोनेंट का इस्तेमाल करें:

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

लेगसी ऐप्लिकेशन अब भी पुराने SwitchCompat AppCompat कॉम्पोनेंट का इस्तेमाल कर सकते हैं, जैसा कि इस उदाहरण में दिखाया गया है:

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

यहां दिए गए उदाहरण में, AppCompatToggleButton को दिखाया गया है. यह एक और लेगसी कॉम्पोनेंट है, जिसका यूज़र इंटरफ़ेस (यूआई) काफ़ी अलग है:

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

ये तीनों कॉम्पोनेंट एक ही तरह से काम करते हैं, लेकिन अलग-अलग दिखते हैं. SwitchMaterial और SwitchCompat के बीच का फ़र्क़ बहुत कम है, लेकिन AppCompatToggleButton काफ़ी अलग है:

SwitchMaterial, SwitchCompat, और AppCompatToggleButton के कंट्रोल

पहली इमेज. तीन तरह के टॉगल बटन.

स्थिति में होने वाले बदलावों को हैंडल करना

SwitchMaterial, SwitchCompat, और AppCompatToggleButton सभी CompoundButton की सब-क्लास हैं. इसकी मदद से, जांच की गई स्थिति में होने वाले बदलावों को मैनेज करने के लिए एक जैसा तरीका इस्तेमाल किया जाता है. CompoundButton.OnCheckedChangeListener का एक उदाहरण लागू करें और इसे बटन में जोड़ें, जैसा कि इस उदाहरण में दिखाया गया है:

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 एक सिंगल ऐब्स्ट्रैक्ट मैथड इंटरफ़ेस (या एसएएम इंटरफ़ेस) है. इसलिए, इसे एक लैम्ब्डा फ़ंक्शन के तौर पर लागू किया जा सकता है. जब भी सही के निशान की स्थिति बदलती है, तब लैम्डा को कॉल किया जाता है. साथ ही, लैम्डा को पास की गई isChecked बूलियन वैल्यू से, जांच की गई नई स्थिति के बारे में पता चलता है.