Quản lý bàn phím có thể tháo rời

Biểu tượng xếp hạng 3 sao

Việc hỗ trợ bàn phím tháo rời giúp người dùng tối đa hoá năng suất trên các thiết bị có màn hình lớn. Android kích hoạt thay đổi cấu hình mỗi khi bàn phím được gắn vào hoặc tháo rời khỏi thiết bị, điều này có thể khiến trạng thái giao diện người dùng bị mất. Ứng dụng của bạn có thể lưu và khôi phục trạng thái, cho phép hệ thống xử lý việc tạo lại hoạt động hoặc hạn chế việc tạo lại hoạt động đối với các thay đổi về cấu hình bàn phím.

Trong mọi trường hợp, tất cả dữ liệu liên quan đến bàn phím đều được lưu trữ trong một đối tượng Configuration. Các trường keyboardkeyboardHidden của đối tượng cấu hình chứa thông tin về loại bàn phím và tình trạng sẵn có của bàn phím.

Các phương pháp hay nhất

Các ứng dụng được tối ưu hoá cho màn hình lớn hỗ trợ mọi loại thiết bị đầu vào, từ bàn phím phần mềm và bàn phím cứng cho đến bút cảm ứng, chuột, bàn di chuột và các thiết bị ngoại vi khác.

Việc hỗ trợ bàn phím ngoài liên quan đến các thay đổi về cấu hình mà bạn có thể quản lý theo một trong hai cách:

  1. Cho phép hệ thống tạo lại hoạt động đang chạy và bạn sẽ quản lý trạng thái của ứng dụng.
  2. Tự quản lý thay đổi về cấu hình (hoạt động sẽ không được tạo lại):
    • Khai báo tất cả các giá trị cấu hình liên quan đến bàn phím
    • Tạo trình xử lý thay đổi cấu hình

Các ứng dụng năng suất thường yêu cầu kiểm soát giao diện người dùng một cách chặt chẽ để nhập văn bản và các dữ liệu đầu vào khác, có thể hưởng lợi từ phương pháp tự xử lý các thay đổi về cấu hình.

Trong một số trường hợp đặc biệt, bạn có thể muốn thay đổi bố cục ứng dụng khi bàn phím phần cứng được gắn hoặc tháo rời, chẳng hạn như để có thêm không gian cho các công cụ hoặc cửa sổ chỉnh sửa.

Trong Jetpack Compose, bạn có thể phản ứng với các thay đổi về cấu hình bàn phím theo 2 cách:

  1. Giao diện người dùng phản ứng: Đọc trạng thái cấu hình hiện tại ngay trong các thành phần kết hợp bằng cách sử dụng LocalConfiguration.current. Giao diện người dùng sẽ tự động kết hợp lại để thích ứng với trạng thái mới khi bàn phím được gắn hoặc tháo rời.
  2. Lệnh gọi lại hiệu ứng phụ: Sử dụng DisposableEffect nhận biết vòng đời để đăng ký trình nghe thay đổi cấu hình trên Hoạt động lưu trữ, cho phép bạn kích hoạt các sự kiện không phải trên giao diện người dùng (chẳng hạn như ghi nhật ký hoặc phân tích) mà không cần tạo lại hoạt động hoặc khởi tạo bất kỳ phần tử khung hiển thị giả nào.

Nguyên liệu

  • android:configChanges: Thuộc tính của phần tử <activity> trong tệp kê khai ứng dụng. Thông báo cho hệ thống về những thay đổi về cấu hình mà ứng dụng quản lý.
  • LocalConfiguration: Nhà cung cấp cục bộ có thể kết hợp, hiển thị Configuration hiện tại của thiết bị.
  • DisposableEffect: API hiệu ứng phụ của Compose chạy một khối mã khi một Thành phần kết hợp tham gia thành phần và dọn dẹp khi rời khỏi.

Các bước

Khai báo thuộc tính configChanges và thêm các giá trị liên quan đến bàn phím để ngăn hoạt động tạo lại. Sau đó, hãy dùng LocalConfiguration.current để điều chỉnh bố cục của Thành phần kết hợp một cách linh hoạt hoặc đăng ký một trình nghe cấu hình bằng DisposableEffect.

1. Khai báo thuộc tính configChanges

Cập nhật phần tử <activity> trong tệp kê khai ứng dụng bằng cách thêm các giá trị keyboard|keyboardHidden vào danh sách các thay đổi về cấu hình đã được quản lý:

<activity
            android:configChanges="...|keyboard|keyboardHidden">

2. Phản hồi các thay đổi về cấu hình bàn phím

Để xử lý các thay đổi về cấu hình trong Jetpack Compose, hãy sử dụng một trong các lựa chọn sau đây, tuỳ thuộc vào việc bạn đang cập nhật giao diện người dùng hay thực thi một lệnh gọi lại hiệu ứng phụ:

  • Lựa chọn A: Giao diện người dùng phản ứng (Nên dùng)

    Đọc trực tiếp loại bàn phím từ LocalConfiguration.current. Khi bàn phím phần cứng được đính kèm hoặc tách rời, giá trị này sẽ thay đổi và Compose sẽ tự động kết hợp lại giao diện người dùng của bạn.

    val configuration = LocalConfiguration.current
    val isPhysicalKeyboardAttached = configuration.keyboard == Configuration.KEYBOARD_QWERTY
    
    if (isPhysicalKeyboardAttached) {
        // Render layout optimized for physical keyboard
    } else {
        // Render default layout
    }

  • Lựa chọn B: Trình nghe hiệu ứng phụ

    Nếu bạn cần chạy một hiệu ứng phụ (chẳng hạn như ghi nhật ký, cập nhật cơ sở dữ liệu cục bộ hoặc kích hoạt số liệu phân tích) khi cấu hình thay đổi, hãy sử dụng DisposableEffect để đăng ký một trình nghe thay đổi cấu hình trên ComponentActivity của máy chủ lưu trữ.

    val context = LocalActivity.current
    DisposableEffect(context) {
        val activity = context as? ComponentActivity
        val listener = Consumer<Configuration> { newConfig ->
            val hasKeyboard = newConfig.keyboard == Configuration.KEYBOARD_QWERTY
            // Trigger non-UI actions, analytics, etc.
        }
        activity?.addOnConfigurationChangedListener(listener)
        onDispose {
            activity?.removeOnConfigurationChangedListener(listener)
        }
    }

Kết quả

Giờ đây, ứng dụng của bạn sẽ phản hồi khi bàn phím bên ngoài được gắn hoặc tháo rời mà không cần tạo lại hoạt động đang chạy.

Tài nguyên khác

Để tìm hiểu cách lưu trạng thái giao diện người dùng của ứng dụng trong quá trình thay đổi cấu hình (chẳng hạn như khi bàn phím được gắn hoặc tháo), hãy xem phần Lưu trạng thái giao diện người dùng.