Chuyển đổi

Thành phần Switch cho phép người dùng chuyển đổi giữa hai trạng thái: đã đánh dấu và chưa đánh dấu. Trong ứng dụng, bạn có thể sử dụng nút chuyển để cho phép người dùng thực hiện một trong những thao tác sau:

  • Bật hoặc tắt một chế độ cài đặt.
  • Bật hoặc tắt một tính năng.
  • Chọn một lựa chọn.

Thành phần này có hai phần: nút điều khiển và thanh trượt. Thumb là phần có thể kéo của nút chuyển, còn track là nền. Người dùng có thể kéo nút thumb sang trái hoặc phải để thay đổi trạng thái của nút chuyển. Họ cũng có thể nhấn vào nút chuyển để kiểm tra và xoá.

Ví dụ về thành phần Switch ở cả chế độ sáng và chế độ tối.
Hình 1. Thành phần nút chuyển.

Cách triển khai cơ bản

Xem tài liệu tham khảo Switch để biết định nghĩa đầy đủ về API. Sau đây là một số tham số chính mà bạn có thể cần sử dụng:

  • checked: Trạng thái ban đầu của nút chuyển.
  • onCheckedChange: Lệnh gọi lại được gọi khi trạng thái của nút chuyển thay đổi.
  • enabled: Cho biết nút chuyển đang bật hay tắt.
  • colors: Màu sắc dùng cho nút chuyển.

Ví dụ sau đây là cách triển khai tối thiểu của thành phần kết hợp Switch.

@Composable
fun SwitchMinimalExample() {
    var checked by remember { mutableStateOf(true) }

    Switch(
        checked = checked,
        onCheckedChange = {
            checked = it
        }
    )
}

Phương thức triển khai này có dạng như sau khi không được đánh dấu:

Nút chuyển cơ bản chưa được đánh dấu.
Hình 2. Một nút chuyển chưa được chọn.

Đây là giao diện khi được đánh dấu:

Một nút chuyển cơ bản được chọn.
Hình 3. Một nút chuyển đã được chọn.

Cách triển khai nâng cao

Sau đây là các tham số chính mà bạn có thể muốn sử dụng khi triển khai một nút chuyển nâng cao hơn:

  • thumbContent: Sử dụng thuộc tính này để tuỳ chỉnh giao diện của nút chọn khi nút này được đánh dấu.
  • colors: Sử dụng thuộc tính này để tuỳ chỉnh màu của rãnh và nút kéo.

Hình thu nhỏ tuỳ chỉnh

Bạn có thể truyền bất kỳ composable nào cho tham số thumbContent để tạo một con trỏ tuỳ chỉnh. Sau đây là ví dụ về một nút chuyển sử dụng biểu tượng tuỳ chỉnh cho nút:

@Composable
fun SwitchWithIconExample() {
    var checked by remember { mutableStateOf(true) }

    Switch(
        checked = checked,
        onCheckedChange = {
            checked = it
        },
        thumbContent = if (checked) {
            {
                Icon(
                    imageVector = Icons.Filled.Check,
                    contentDescription = null,
                    modifier = Modifier.size(SwitchDefaults.IconSize),
                )
            }
        } else {
            null
        }
    )
}

Trong cách triển khai này, giao diện khi chưa được đánh dấu giống với ví dụ trong phần trước. Tuy nhiên, khi được đánh dấu, phương thức triển khai này sẽ có dạng như sau:

Một nút chuyển sử dụng tham số thumbContent để hiển thị biểu tượng tuỳ chỉnh khi được đánh dấu.
Hình 4. Một nút chuyển có biểu tượng đã chọn tuỳ chỉnh.

Tùy chỉnh màu

Ví dụ sau đây minh hoạ cách bạn có thể sử dụng tham số màu để thay đổi màu của nút bật/tắt và rãnh, có tính đến việc nút bật/tắt có được chọn hay không.

@Composable
fun SwitchWithCustomColors() {
    var checked by remember { mutableStateOf(true) }

    Switch(
        checked = checked,
        onCheckedChange = {
            checked = it
        },
        colors = SwitchDefaults.colors(
            checkedThumbColor = MaterialTheme.colorScheme.primary,
            checkedTrackColor = MaterialTheme.colorScheme.primaryContainer,
            uncheckedThumbColor = MaterialTheme.colorScheme.secondary,
            uncheckedTrackColor = MaterialTheme.colorScheme.secondaryContainer,
        )
    )
}

Phương thức triển khai có dạng như sau:

Một nút chuyển sử dụng tham số màu để hiển thị nút chuyển có màu sắc tuỳ chỉnh cho cả nút gạt và rãnh.
Hình 5. Nút chuyển có màu sắc tuỳ chỉnh.

Tài nguyên khác