特殊文本识别,是指自动检测文本内容中具备特定格式或语义的信息(如链接、日期、电话号码等),并将其赋予交互功能,实现一键跳转或快捷操作。这一能力让用户在阅读、聊天、办公等场景下,无需复制粘贴即可高效完成访问网页、添加日程、拨打电话等任务。
以社交应用场景为例,当用户在聊天过程中收到包含特殊文本的消息时,系统会自动识别这些内容并渲染为可点击的链接。用户点击后,即可快速完成如打开网页、跳转应用详情、拨打电话、写邮件等操作,极大提升了用户体验和操作效率。
本文主要是为了帮助开发者了解在社交应用中,如何识别出一段文字中的特殊文本,并将其标记为链接的格式,赋予其交互能力。常见的特殊文本类型包括:
用户点击这些特殊文本后,系统自动弹出操作面板,根据具体类别执行对应动作。
以社交应用中好友之间相互发送聊天信息为例,这些信息中可能会包含标准HTTP/HTTPS链接、App Linking链接、日期、电话号码、地址、邮箱等。这些特殊的文本,通常会被识别为可点击的链接格式。
用户点击这些经过系统底层处理过的文本后,会拉起相应的操作菜单,点击操作菜单中的可选项后,则会进行相应的跳转处理。各种链接点击后效果如下图所示。
| 类型 | 标准HTTP/HTTPS链接 | App Linking链接 | 日期 |
|---|---|---|---|
| 效果图 | ![]() | ![]() | ![]() |
| 类型 | 电话号码 | 地址 | 邮箱 |
| 效果图 | ![]() | ![]() | ![]() |
本文中所有电话号码均为示例用途,非真实可用号码。
Text组件提供了enableDataDetector属性,通过将该属性设置为true,即可进行文本特殊实体识别。一段文字中若包含标准HTTP/HTTPS链接、App Linking链接、日期、电话号码、地址、邮箱等,则这些特殊文本会被自动识别为可点击的链接格式。手势点击和鼠标右键点击实体,会根据实体类型弹出对应的实体操作菜单,鼠标左键点击实体会直接响应菜单的第一个选项。
常用的文本与输入组件是否支持设置enableDataDetector属性如下表所示。
| 组件 | 是否支持enableDataDetector属性 |
|---|---|
| Text | 是 |
| TextArea | 否 |
| TextInput | 否 |
| RichEditor | 是 |
| RichText | 否 |
自定义带头像和文本信息的组件。
封装如TextLink组件,参数包含头像资源(img)和文本内容(text)。
@Component
export default struct TextLink {
@State enableDataDetector: boolean = true;
public img: string | PixelMap | Resource = $r('app.media.Public_avatar');
public text: ResourceStr = '';
// ...
} 组件样式设置。
为头像、文本等元素分配合适UI样式,提升聊天或内容流的展示效果。
Row() {
Image(this.img)
.width(36)
.height(36)
Row() {
Text(this.text)
.enableDataDetector(this.enableDataDetector)
}
.borderRadius({
topLeft: 2,
topRight: 16,
bottomLeft: 16,
bottomRight: 16
})
.margin({ left: 8 })
.padding({
left: 12,
right: 12,
top: 12,
bottom: 12
})
.backgroundColor(Color.White)
.constraintSize({ maxWidth: 300 })
.width('100%')
}
.alignItems(VerticalAlign.Top)
.margin({
left: 16,
right: 16,
bottom: 12
})
.width('100%') 实现效果如下图所示。

启用特殊文本识别。
在Text组件上启用enableDataDetector属性,即可实现对一段文字中的链接、日期、电话号码、地址、邮箱等特殊文本进行自动识别并标记。
Text(this.text) .enableDataDetector(this.enableDataDetector)
识别效果验证。
分别传入包含标准HTTP/HTTPS链接、App Linking链接、日期、电话号码、地址、邮箱等文字内容到TextLink组件中,均以可交互形式显示。
