在文本字段中使用触控笔输入

Android 14(API 级别 34)及更高版本允许用户向任何文本输入写入内容 字段。Android 文本输入字段,包括 EditText 组件和 WebView 文本 widget,支持 默认使用触控笔输入

不过,如果您的应用需要自定义文本输入字段(请参阅自定义文本 编辑者)或 具有复杂的布局,其中文本输入字段叠加在绘图表面上,您将 您需要自定义应用

图 1. 使用触控笔进行手写输入。

EditText

Android 14 默认为所有 EditText 字段启用触控笔手写功能 和更高版本。当触控笔移动时,EditText 会启动手写模式 事件触发。

手写边界包括 40 dp 的垂直内边距和 10 dp 的水平内边距 围绕视图周围的内边距。调整手写边界 setHandwritingBoundsOffsets()。 停用手写功能 setAutoHandwritingEnabled(false)

包含矩形的输入字段,用于指示触控笔动作事件的检测边界。
图 2. EditText 字段的手写边界。

输入委托

应用可以显示占位符界面元素,这些元素看起来像是文本输入字段, 实际上只是没有文本输入功能的静态界面元素。搜索 就是一个常见的例子点按静态界面元素会触发转场 一个新界面,其中包含一个专注于输入的功能文本输入字段。

图 3. 从静态界面元素到文本输入字段的输入委托。

触控笔输入委托

使用手写委托 API 支持触控笔手写输入 占位符输入字段(请参阅 setHandwritingDelegatorCallback()setIsHandwritingDelegate())。 占位符界面元素已配置为将手写内容委托给功能类 输入字段,例如:

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);
}

当触控笔在占位符文本输入字段视图上移动时,系统会调用相应回调。 该回调会触发界面转换,以显示并聚焦功能输入 字段。回调实现通常与实现相同 。当功能输入字段 会创建 InputConnection、 触控笔手写模式启动。

图 4. 从静态界面元素到文本输入字段的触控笔输入委托。

Material Design

通过 com.google.android.material.search 库提供了 SearchBarSearchView 类 以便于实现占位符界面模式。

占位符和功能搜索视图通过 setUpWithSearchBar()

手写委托在 Material 库中配置,无需额外 开发应用

与绘图表面重叠

如果您的应用有一个绘图 surface,并且文本字段叠加在 surface 上,则您需要 可能需要停用触控笔手写功能,才能允许用户进行绘图。请参阅 setAutoHandwritingEnabled()

测试

搭载 Android 14 及更高版本且符合以下条件的设备支持触控笔手写功能: 兼容的触控笔输入设备和输入法 编辑器 (IME) 支持 Android 14 触控笔手写 API。

如果您没有触控笔输入设备,请在任何设备上模拟触控笔输入 使用以下 Android 调试桥访问 root 权限(包括模拟器)的权限 (adb) 命令:


// 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

如果你使用的设备不支持 Gboard,请使用 Gboard Beta 版进行测试 触控笔。

其他资源