Việc hỗ trợ bàn phím có thể tháo rời giúp tối đa hoá năng suất của người dùng trên các Thiết bị có màn hình lớn. Android kích hoạt thay đổi về cấu hình mỗi khi bàn phím được gắn vào hoặc tháo ra khỏi thiết bị, điều này có thể làm mất trạng thái giao diện người dùng. Ứ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 đố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à khả năng sử dụng của bàn phím.
Các phương pháp hay nhất
Ứ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à phần cứng đế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:
- Hãy để hệ thống tạo lại hoạt động đang chạy và bạn sẽ đảm nhận việc 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ả 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 cải thiện năng suất (thường yêu cầu kiểm soát chặt chẽ giao diện người dùng để 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 vào hoặc tháo ra, chẳng hạn như để tạo 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 hai cách:
- Giao diện người dùng thích ứng: Đọc trực tiếp trạng thái cấu hình hiện tại trong
Thành phần kết hợp bằ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 vào hoặc tháo ra. - Lệnh gọi lại tác dụ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 liên quan đến giao diện người dùng (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 tạo thực thể cho 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ề các thay đổi cấu hình mà ứng dụng quản lý.LocalConfiguration: Nhà cung cấp cục bộ composable, hiển thịConfigurationcủa thiết bị hiện tại.DisposableEffect: API tác dụng phụ của Compose chạy một khối mã khi một composable chuyển sang composition, và dọn dẹp khi composable đó rời khỏi composition.
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 sử dụng LocalConfiguration.current để điều chỉnh bố cục Composable một cách linh động hoặc đăng ký 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 tuỳ chọn sau, 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 lệnh gọi lại tác dụng phụ:
Lựa chọn A: Giao diện người dùng thích ứ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 gắn vào hoặc tháo ra, 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.val configuration = LocalConfiguration.current val isPhysicalKeyboardAttached = configuration.keyboard == Configuration.KEYBOARD_QWERTY if (isPhysicalKeyboardAttached) { // Render layout optimized for physical keyboard } else { // Render default layout }
Cách B: Trình nghe tác dụ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ý trình nghe thay đổi cấu hình trên máy chủComponentActivity.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 vào hoặc tháo ra 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 như gắn hoặc tháo bàn phím, hãy xem phần Lưu trạng thái giao diện người dùng.