Android 14(API 级别 34)及更高版本允许用户向任何文本输入写入内容
字段。Android 文本输入字段,包括
EditText
组件和
WebView
文本 widget,支持
默认使用触控笔输入
不过,如果您的应用需要自定义文本输入字段(请参阅自定义文本 编辑者)或 具有复杂的布局,其中文本输入字段叠加在绘图表面上,您将 您需要自定义应用
EditText
Android 14 默认为所有 EditText
字段启用触控笔手写功能
和更高版本。当触控笔移动时,EditText
会启动手写模式
事件触发。
手写边界包括 40 dp 的垂直内边距和 10 dp 的水平内边距
围绕视图周围的内边距。调整手写边界
setHandwritingBoundsOffsets()
。
停用手写功能
setAutoHandwritingEnabled(false)
。
![包含矩形的输入字段,用于指示触控笔动作事件的检测边界。](https://developer.android.google.cn/static/images/develop/ui/compose/touch-input/stylus-input/shared/edittext_handwriting_bounds.png?authuser=7&hl=fi)
EditText
字段的手写边界。
输入委托
应用可以显示占位符界面元素,这些元素看起来像是文本输入字段, 实际上只是没有文本输入功能的静态界面元素。搜索 就是一个常见的例子点按静态界面元素会触发转场 一个新界面,其中包含一个专注于输入的功能文本输入字段。
触控笔输入委托
使用手写委托 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
、
触控笔手写模式启动。
Material Design
通过
com.google.android.material.search
库提供了
SearchBar
和
SearchView
类
以便于实现占位符界面模式。
占位符和功能搜索视图通过
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 版进行测试 触控笔。