Android 14 (API cấp 34) trở lên cho phép người dùng viết vào bất kỳ trường nhập văn bản nào trong ứng dụng bất kỳ bằng bút cảm ứng. Theo mặc định, các trường nhập văn bản trên Android (bao gồm cả thành phần EditText
và tiện ích văn bản WebView
) hỗ trợ phương thức nhập bằng bút cảm ứng.
Tuy nhiên, nếu ứng dụng của bạn yêu cầu các trường nhập văn bản tuỳ chỉnh (xem Trình chỉnh sửa văn bản tuỳ chỉnh) hoặc có bố cục phức tạp với các trường nhập văn bản phủ lên một bề mặt vẽ, thì bạn sẽ cần tuỳ chỉnh ứng dụng.
EditText
Tính năng viết tay bằng bút cảm ứng được bật theo mặc định cho tất cả các trường EditText
trên Android 14 trở lên. Chế độ viết tay được bắt đầu cho EditText
khi phát hiện một sự kiện chuyển động bằng bút cảm ứng trong giới hạn viết tay của thành phần hiển thị.
Các đường biên chữ viết tay bao gồm khoảng đệm dọc 40 dp và khoảng đệm ngang 10 dp xung quanh khung hiển thị. Điều chỉnh giới hạn chữ viết tay bằng setHandwritingBoundsOffsets()
.
Tắt tính năng viết tay bằng setAutoHandwritingEnabled(false)
.
![Trường nhập có hình chữ nhật xung quanh cho biết các giới hạn để phát hiện sự kiện chuyển động của bút cảm ứng.](https://developer.android.google.cn/static/images/develop/ui/compose/touch-input/stylus-input/shared/edittext_handwriting_bounds.png?authuser=6&hl=vi)
EditText
.
Uỷ quyền đầu vào
Ứng dụng có thể hiển thị các phần tử giao diện người dùng giữ chỗ có vẻ như là các trường nhập văn bản nhưng thực sự chỉ là các phần tử giao diện người dùng tĩnh không có khả năng nhập văn bản. Ví dụ phổ biến là trường tìm kiếm. Thao tác nhấn vào thành phần giao diện người dùng tĩnh sẽ kích hoạt quá trình chuyển đổi sang giao diện người dùng mới chứa trường nhập văn bản có chức năng tập trung vào hoạt động nhập.
Uỷ quyền phương thức nhập bằng bút cảm ứng
Sử dụng API uỷ quyền viết tay để hỗ trợ nhập liệu bằng bút cảm ứng cho các trường nhập liệu phần giữ chỗ (xem setHandwritingDelegatorCallback()
và setIsHandwritingDelegate()
). Phần tử giao diện người dùng phần giữ chỗ được định cấu hình để uỷ quyền viết tay cho một trường nhập liệu chức năng, ví dụ:
Kotlin
if (Build.VERSION.SDK_INT >= 34) { placeholderInputField.setHandwritingDelegatorCallback { showAndFocusDelegateInputField() } delegateInputField.setIsHandwritingDelegate(true) }
Java
if (Build.VERSION.SDK_INT >= 34) { placeholderInputField.setHandwritingDelegatorCallback(this::showAndFocusInputFieldDelegate); delegateInputField.setIsHandwritingDelegate(true); }
Thao tác bằng bút cảm ứng trên thành phần hiển thị trường nhập văn bản giữ chỗ sẽ gọi lệnh gọi lại.
Lệnh gọi lại kích hoạt quá trình chuyển đổi giao diện người dùng để hiển thị và lấy tiêu điểm của trường nhập dữ liệu chức năng. Việc triển khai lệnh gọi lại thường giống với việc triển khai trình nghe lượt nhấp trên phần tử giữ chỗ. Khi trường nhập dữ liệu chức năng tạo một InputConnection
, chế độ viết tay bằng bút cảm ứng sẽ bắt đầu.
Material Design
Thư viện com.google.android.material.search
cung cấp các lớp SearchBar
và SearchView
để hỗ trợ triển khai mẫu giao diện người dùng phần giữ chỗ.
Chế độ xem tìm kiếm chức năng và phần giữ chỗ được liên kết với setUpWithSearchBar()
.
Bạn có thể định cấu hình tính năng uỷ quyền chữ viết tay trong thư viện Material mà không cần phát triển thêm trong ứng dụng.
Lồng ghép với các bề mặt vẽ
Nếu ứng dụng của bạn có một nền tảng vẽ với trường văn bản phủ lên nền tảng đó, bạn có thể cần tắt tính năng viết tay bằng bút cảm ứng để cho phép người dùng vẽ. Xem setAutoHandwritingEnabled()
.
Thử nghiệm
Tính năng viết tay bằng bút cảm ứng được hỗ trợ trên các thiết bị chạy Android 14 trở lên có thiết bị nhập bằng bút cảm ứng tương thích và trình chỉnh sửa phương thức nhập (IME) hỗ trợ các API viết tay bằng bút cảm ứng Android 14.
Nếu bạn không có thiết bị nhập bằng bút cảm ứng, hãy mô phỏng hoạt động nhập bằng bút cảm ứng trên mọi thiết bị có quyền truy cập thư mục gốc (bao gồm cả trình mô phỏng) bằng các lệnh Cầu gỡ lỗi Android (adb) sau:
// Android 14
adb shell setprop persist.debug.input.simulate_stylus_with_touch true && adb shell stop && adb shell start
// Android 15 and higher
// Property takes effect after screen reconfiguration such as orientation change.
adb shell setprop debug.input.simulate_stylus_with_touch true
Sử dụng phiên bản thử nghiệm của Gboard để kiểm thử nếu bạn đang sử dụng một thiết bị không hỗ trợ bút cảm ứng.
Tài nguyên khác
- Material Design – Trường văn bản
- Trình chỉnh sửa văn bản tuỳ chỉnh