Nhập bằng bút cảm ứng vào các trường văn bản

Android 14 (API cấp 34) trở lên cho phép người dùng ghi vào bất kỳ trường nhập văn bản nào trong mọi ứng dụng bằng bút cảm ứng. Các trường nhập văn bản của Android (bao gồm cả các thành phần EditText và tiện ích văn bản WebView) đều hỗ trợ phương thức nhập bằng bút cảm ứng theo mặc định.

Tuy nhiên, nếu ứng dụng yêu cầu các trường nhập văn bản tuỳ chỉnh (xem phần 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 khu vực vẽ, thì bạn cần tuỳ chỉnh ứng dụng của mình.

Hình 1. Nhập bằng tay bằng bút cảm ứng.

EditText

Theo mặc định, tính năng viết tay bằng bút cảm ứng được bật cho tất cả các trường EditText trên Android 14 trở lên. Chế độ viết tay được khởi động cho EditText khi phát hiện thấy một sự kiện chuyển động của bút cảm ứng trong ranh giới chữ viết tay của chế độ xem.

Giới hạn của chữ viết tay bao gồm 40 dp cho khoảng đệm dọc và 10 dp của khoảng đệm ngang xung quanh chế độ xem. Điều chỉnh ranh giới chữ viết tay bằng setHandwritingBoundsOffsets(). Tắt tính năng viết tay bằng setAutoHandwritingEnabled(false).

Trường nhập dữ liệu có hình chữ nhật bao quanh cho biết các ranh giới giúp phát hiện sự kiện chuyển động của bút cảm ứng.
Hình 2. Giới hạn viết tay của các trường EditText.

Uỷ quyền nhập dữ liệu

Ứng dụng có thể cho thấy các phần tử giữ chỗ trên giao diện người dùng trông giống như các trường nhập văn bản nhưng thực ra chỉ là các phần tử tĩnh trên giao diện người dùng không có khả năng nhập văn bản. Trường tìm kiếm là một ví dụ phổ biến. Thao tác nhấn vào thành phần tĩnh trên giao diện người dùng sẽ kích hoạt quá trình chuyển đổi sang giao diện người dùng mới có chứa trường nhập dữ liệu văn bản đang hoạt động tập trung để nhập thông tin.

Hình 3. Uỷ quyền nhập từ thành phần tĩnh trên giao diện người dùng sang trường nhập văn bản.

Uỷ quyền nhập bằng bút cảm ứng

Sử dụng API uỷ quyền viết tay để hỗ trợ nhập bằng chữ viết tay bằng bút cảm ứng cho các trường nhập dữ liệu giữ chỗ (xem setHandwritingDelegatorCallback()setIsHandwritingDelegate()). Thành phần phần giữ chỗ trên giao diện người dùng được định cấu hình để uỷ quyền chữ viết tay cho một trường nhập 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);
}

Chuyển động bằng bút cảm ứng trên chế độ xem trường nhập văn bản của phầ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à tập trung vào trường nhập chức năng. Cách triển khai lệnh gọi lại thường giống như cách 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 InputConnection, chế độ viết tay bằng bút cảm ứng sẽ khởi động.

Hình 4. Uỷ quyền nhập bằng bút cảm ứng từ thành phần tĩnh trên giao diện người dùng đến trường nhập văn bản.

Material Design

Thư viện com.google.android.material.search cung cấp các lớp SearchBarSearchView nhằm hỗ trợ việc triển khai mẫu giao diện người dùng cho phần giữ chỗ.

Các khung hiển thị tìm kiếm chức năng và phần giữ chỗ được liên kết với setUpWithSearchBar().

Uỷ quyền viết tay được định cấu hình trong thư viện Material mà không cần phát triển thêm trong ứng dụng.

Trùng lặp với các bề mặt vẽ

Nếu ứng dụng của bạn có khu vực vẽ với trường văn bản phủ lên bề mặt đó, thì 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ẽ. Hãy xem setAutoHandwritingEnabled().

Kiểm thử

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 với 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ợ 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 phương thức 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ách sử dụ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

Hãy dùng phiên bản beta 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