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 keyboard và keyboardHidden 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:
- 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.
- 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:
- 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. - Lệnh gọi lại hiệu ứng phụ: Sử dụng
DisposableEffectnhậ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ịConfigurationhiệ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ênComponentActivitycủ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.