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