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ả thành phần của TextField
Android 14 trở lên và
androidx.compose.foundation:foundation:1.7.0
phần phụ thuộc. Chế độ viết tay đã được kích hoạt cho TextField khi bút cảm ứng chuyển động
sự kiện được phát hiện trong giới hạn chữ viết tay của thành phần.
Giới hạn viết tay bao gồm khoảng đệm dọc 40 dp và chiều ngang 10 dp
khoảng đệm xung quanh trường nhập dữ liệu.
Hình 2. Giới hạn chữ viết tay của các thành phần TextField.
Không hỗ trợ viết tay bằng bút cảm ứng cho các trường TextField khi phương thức nhập
được yêu cầu chỉnh sửa với KeyboardType.Password.
Uỷ quyền dữ liệu đầu vào
Ứ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 dữ liệu văn bản
thực ra chỉ là các thành phần tĩnh trên giao diện người dùng không có tính năng nhập văn bản. Tìm kiếm
là một ví dụ phổ biến. Thao tác nhấn vào phần tử tĩnh trên giao diện người dùng sẽ kích hoạt hiệu ứng chuyển đổi
sang giao diện người dùng mới có chứa trường nhập dữ liệu chức năng làm tiêu điểm cho nhập dữ liệu.
Hình 3. Uỷ quyền đầu vào từ thành phần tĩnh trên giao diện người dùng sang trường nhập dữ liệu văn bản.
Uỷ quyền nhập bằng bút cảm ứng
Sử dụng API uỷ quyền chữ viết tay để hỗ trợ tính năng nhập bằng chữ viết tay bằng bút cảm ứng cho
các trường nhập phần giữ chỗ (xem handwritingDetector và
handwritingHandler). Phần giữ chỗ trên giao diện người dùng là
được định cấu hình để uỷ quyền chữ viết tay cho trường nhập dữ liệu chức năng. Ví dụ
triển khai, xem
HandwritingDetectorSample.kt.
Chế độ viết tay bằng bút cảm ứng bắt đầu khi trường nhập chức năng nhận được tiêu điểm và
tạo ra một
InputConnection.
Hình 4. Tính năng 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 sang trường nhập văn bản.
Thử nghiệm
Viết tay bằng bút cảm ứng được hỗ trợ trên các thiết bị Android 14 trở lên có
thiết bị đầu vào tương thích bằng bút cảm ứng và phương thức nhập
trình chỉnh sửa (IME) mà
hỗ trợ API viết tay bằng bút cảm ứng cho Android 14.
Nếu bạn không có thiết bị đầu vào 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 bất kỳ thiết bị nào
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ầu gỡ lỗi Android sau đây
(adb):
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-07-27 UTC."],[],[],null,["# Stylus input in text fields\n\nThe Jetpack\n[`androidx.compose.material3`](/jetpack/androidx/releases/compose-material3)\nlibrary enables users to write into any [`TextField`](/reference/kotlin/androidx/compose/material/package-summary#TextField(androidx.compose.ui.text.input.TextFieldValue,kotlin.Function1,androidx.compose.ui.Modifier,kotlin.Boolean,kotlin.Boolean,androidx.compose.ui.text.TextStyle,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Function0,kotlin.Boolean,androidx.compose.ui.text.input.VisualTransformation,androidx.compose.foundation.text.KeyboardOptions,androidx.compose.foundation.text.KeyboardActions,kotlin.Boolean,kotlin.Int,kotlin.Int,androidx.compose.foundation.interaction.MutableInteractionSource,androidx.compose.ui.graphics.Shape,androidx.compose.material.TextFieldColors)) component in\nany app using a stylus.\nYour browser doesn't support the video tag. **Figure 1.** Handwritten input with a stylus.\n\nTo enable stylus input by default, add the library dependency to your app's\n`build.gradle` file: \n\n### Kotlin\n\n```kotlin\ndependencies {\n implementation(\"androidx.compose.foundation:foundation:\u003cvar translate=\"no\"\u003eLATEST_COMPOSE_VERSION\u003c/var\u003e\")\n}\n\nandroid {\n buildFeatures {\n compose = true\n }\n\n composeOptions {\n kotlinCompilerExtensionVersion = \"\u003cvar translate=\"no\"\u003eLATEST_EXTENSION_VERSION\u003c/var\u003e\"\n }\n\n kotlinOptions {\n jvmTarget = \"\u003cvar translate=\"no\"\u003eLATEST_JVM_VERSION\u003c/var\u003e\"\n }\n}\n```\n\n### Groovy\n\n```groovy\ndependencies {\n implementation 'androidx.compose.foundation:foundation:\u003cvar translate=\"no\"\u003eLATEST_COMPOSE_VERSION\u003c/var\u003e'\n}\n\nandroid {\n buildFeatures {\n compose true\n }\n\n composeOptions {\n kotlinCompilerExtensionVersion = '\u003cvar translate=\"no\"\u003eLATEST_EXTENSION_VERSION\u003c/var\u003e'\n }\n\n kotlinOptions {\n jvmTarget = '\u003cvar translate=\"no\"\u003eLATEST_JVM_VERSION\u003c/var\u003e'\n }\n}\n```\n\n`TextField`\n-----------\n\nStylus handwriting is enabled for all `TextField` components by default on\nAndroid 14 and higher and the\n[`androidx.compose.foundation:foundation:1.7.0`](/jetpack/androidx/releases/compose-foundation)\ndependency. Handwriting mode is started for a `TextField` when a stylus motion\nevent is detected within the handwriting bounds of the component.\n\nThe handwriting bounds include 40 dp of vertical padding and 10 dp of horizontal\npadding around the input field.\n**Figure 2.** Handwriting bounds of `TextField` components.\n\nStylus handwriting is not supported for `TextField` fields when the input method\neditor is requested with [`KeyboardType.Password`](/reference/kotlin/androidx/compose/ui/text/input/KeyboardType#Password()).\n\nInput delegation\n----------------\n\nApps can display placeholder UI elements that appear to be text input fields but\nare actually just static UI elements with no text input capability. Search\nfields are a common example. Tapping the static UI element triggers a transition\nto a new UI that contains a functional text input field focused for input.\nYour browser doesn't support the video tag. **Figure 3.** Input delegation from static UI element to text input field.\n\n### Stylus input delegation\n\nUse the handwriting delegation APIs to support stylus handwriting input for\nplaceholder input fields (see [`handwritingDetector`](/reference/kotlin/androidx/compose/foundation/text/handwriting/package-summary#(androidx.compose.ui.Modifier).handwritingDetector(kotlin.Function0)) and\n[`handwritingHandler`](/reference/kotlin/androidx/compose/foundation/text/handwriting/package-summary#(androidx.compose.ui.Modifier).handwritingHandler())). The placeholder UI element is\nconfigured to delegate handwriting to a functional input field. For an example\nimplementation, see\n[`HandwritingDetectorSample.kt`](https://cs.android.com/androidx/platform/frameworks/support/+/androidx-main:compose/foundation/foundation/samples/src/main/java/androidx/compose/foundation/samples/HandwritingDetectorSample.kt).\n\nStylus handwriting mode starts when the functional input field gains focus and\ncreates an\n[`InputConnection`](/reference/kotlin/android/view/inputmethod/InputConnection).\nYour browser doesn't support the video tag. **Figure 4.** Stylus input delegation from static UI element to text input field.\n\nTesting\n-------\n\nStylus handwriting is supported on Android 14 and higher devices with a\ncompatible stylus input device and an [input method\neditor](/develop/ui/views/touch-and-input/creating-input-method) (IME) that\nsupports the Android 14 stylus handwriting APIs.\n\nIf you don't have a stylus input device, simulate stylus input on any device\nwith root access (including emulators) using the following Android Debug Bridge\n(adb) commands: \n\n\n // Android 14\n adb shell setprop persist.debug.input.simulate_stylus_with_touch true && adb shell stop && adb shell start\n\n // Android 15 and higher\n // Property takes effect after screen reconfiguration such as orientation change.\n adb shell setprop debug.input.simulate_stylus_with_touch true\n\nUse the Gboard beta for testing if you are using a device that doesn't support\nstylus.\n\nAdditional resources\n--------------------\n\n- Material Design --- [Text fields](https://m3.material.io/components/text-fields/overview)\n- [Handle user input](/develop/ui/compose/text/user-input)"]]