当前位置: 首页 > news >正文

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Search)

搜索框组件,适用于浏览器的搜索内容输入框等应用场景。

说明:

该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

接口

Search(options?: { value?: string, placeholder?: ResourceStr, icon?: string, controller?: SearchController })

参数:

参数名参数类型必填参数描述
valuestring设置当前显示的搜索文本内容。
从API version 10开始,该参数支持$$双向绑定变量。
placeholderResourceStr10+设置无输入时的提示文本。
iconstring设置搜索图标路径,默认使用系统搜索图标。
说明:
icon的数据源支持本地图片和网络图片。
- 支持的图片格式包括png、jpg、bmp、svg、gif和pixelmap。
- 支持Base64字符串。格式data:image/[png|jpeg|bmp|webp];base64,[base64 data], 其中[base64 data]为Base64字符串数据。
如果与属性searchIcon同时设置,则searchIcon优先。
controllerSearchController设置Search组件控制器。

属性

除支持通用属性外,还支持以下属性:

名称参数类型描述
searchButton10+value: string,
option?: SearchButtonOptions
搜索框末尾搜索按钮文本内容,默认无搜索按钮。
placeholderColorResourceColor设置placeholder文本颜色。
默认值:'#99182431'。
placeholderFontFont设置placeholder文本样式,包括字体大小,字体粗细,字体族,字体风格。目前仅支持默认字体族。
textFontFont设置搜索框内输入文本样式,包括字体大小,字体粗细,字体族,字体风格。目前仅支持默认字体族。
textAlignTextAlign设置文本在搜索框中的对齐方式。目前支持的对齐方式有:Start、Center、End。
默认值:TextAlign.Start
copyOption9+CopyOptions设置输入的文本是否可复制。
默认值:CopyOptions.LocalDevice,支持设备内复制。
设置CopyOptions.None时,当前Search中的文字无法被复制或剪切,仅支持粘贴。
searchIcon10+IconOptions设置左侧搜索图标样式。
cancelButton10+{
style? : CancelButtonStyle
icon?: IconOptions
}
设置右侧清除按钮样式。
默认值:
{
style:CancelButtonStyle.INPUT
}
fontColor10+ResourceColor设置输入文本的字体颜色。
默认值:'#FF182431'。
说明:
文本通用属性fontSize、fontStyle、fontWeight和fontFamily在textFont属性中设置。
caretStyle10+CaretStyle设置光标样式。
默认值:
{
width: '1.5vp',
color: '#007DFF'
}
enableKeyboardOnFocus10+booleanSearch获焦时,是否绑定输入法
默认值:true。从API version 10开始,获焦默认绑定输入法。
selectionMenuHidden10+boolean设置长按输入框或者右键输入框时,是否弹出文本选择菜单。
默认值:false
customKeyboard10+CustomBuilder设置自定义键盘。
说明:
当设置自定义键盘时,输入框激活后不会打开系统输入法,而是加载指定的自定义组件。
自定义键盘的高度可以通过自定义组件根节点的height属性设置,宽度不可设置,使用系统默认值。
自定义键盘采用覆盖原始界面的方式呈现,不会对应用原始界面产生压缩或者上提。
自定义键盘无法获取焦点,但是会拦截手势事件。
默认在输入控件失去焦点时,关闭自定义键盘,开发者也可以通过stopEditing方法控制键盘关闭。
如果设备支持拍摄输入,设置自定义键盘后,该输入框会不支持拍摄输入。
type11+SearchType设置输入框类型。
默认值:SearchType.Normal
maxLength11+number设置文本的最大输入字符数。
默认不设置最大输入字符数限制。
到达文本最大字符限制,将无法继续输入字符。

IconOptions10+对象说明

参数名参数类型必填参数描述
sizeLength图标尺寸,不支持百分比。
colorResourceColor图标颜色。
srcResourceStr图标/图片源。

CaretStyle10+对象说明

参数名参数类型必填参数描述
widthLength光标尺寸,不支持百分比。
colorResourceColor光标颜色。

SearchButtonOptions10+对象说明

参数名参数类型必填参数描述
fontSizeLength文本按钮字体大小,不支持百分比。
fontColorResourceColor文本按钮字体颜色。

CancelButtonStyle10+枚举说明

名称描述
CONSTANT清除按钮常显样式。
INVISIBLE清除按钮常隐样式。
INPUT清除按钮输入样式。

SearchType11+枚举说明

名称描述
Normal基本输入模式。
支持输入数字、字母、下划线、空格、特殊字符。
Email邮箱地址输入模式。支持数字,字母,下划线,以及@字符(只能存在一个@字符)。
Number纯数字输入模式。
PhoneNumber电话号码输入模式。
支持输入数字、+ 、-、*、#,长度不限。

事件

除支持通用事件外,还支持以下事件:

名称功能描述
onSubmit(callback: (value: string) => void)点击搜索图标、搜索按钮或者按下软键盘搜索按钮时触发该回调。
-value: 当前搜索框中输入的文本内容。
onChange(callback: (value: string) => void)输入内容发生变化时,触发该回调。
-value: 当前搜索框中输入的文本内容。
onCopy(callback: (value: string) => void)长按搜索框弹出剪切板之后,点击剪切板的复制按钮触发该回调。
-value: 复制的文本内容。
onCut(callback: (value: string) => void)长按搜索框弹出剪切板之后,点击剪切板的剪切按钮触发该回调。
-value: 剪切的文本内容。
onPaste(callback: (value: string, event11+: PasteEvent) => void)长按搜索框弹出剪切板之后,点击剪切板的粘贴按钮触发该回调。
- value: 粘贴的文本内容。
- event: 用户自定义的粘贴事件。
onTextSelectionChange(callback: (selectionStart: number, selectionEnd: number) => void)10+文本选择的位置发生变化时,触发该回调。
selectionStart:文本选择区域起始位置,文本框中文字的起始位置为0。
selectionEnd:文本选择区域结束位置。
onContentScroll(callback: (totalOffsetX: number, totalOffsetY: number) => void)10+文本内容滚动时,触发该回调。
totalOffsetX:文本在内容区的横坐标偏移,单位px。
totalOffsetY:文本在内容区的纵坐标偏移,单位px。

SearchController

Search组件的控制器,目前通过它可控制Search组件的光标位置。

导入对象

controller: SearchController = new SearchController()

caretPosition

caretPosition(value: number): void

设置输入光标的位置。

参数:

参数名参数类型必填参数描述
valuenumber从字符串开始到光标所在位置的长度。

stopEditing10+

stopEditing(): void

退出编辑态。

getTextContentRect10+

getTextContentRect(): RectResult

获取已编辑文本内容区域相对组件的位置和大小,返回值单位为像素。

返回值:

类型说明
RectResult已编辑文本内容的相对组件的位置和大小。

说明:

  • 返回的位置信息是相对Search组件中搜索图标的偏移值。
  • 不输入文本时,返回值中有相对Search组件的位置信息,但大小为0。
  • 返回值中的位置信息是第一个字符相对于可编辑组件的位置。

RectResult10+

位置和大小,单位均为像素。

参数类型描述
xnumber水平方向横坐标。
ynumber竖直方向纵坐标。
widthnumber内容宽度大小。
heightnumber内容高度大小。

getTextContentLineCount10+

getTextContentLineCount(): number

获取已编辑文本内容的行数。

返回值:

类型说明
number已编辑文本内容行数。

getCaretOffset11+

getCaretOffset(): CaretOffset

返回当前光标所在位置信息。

返回值:

类型说明
CaretOffset光标相对输入框的位置。

说明:

  • 返回的位置信息是相对Search组件中搜索图标的偏移值。
  • 不输入文本时,返回值中有相对Search组件的位置信息。
  • 返回值中的位置信息是光标相对于可编辑组件的位置。
  • 在当前帧更新光标位置同时调用该接口,该接口不生效。

示例

示例1

// xxx.ets
@Entry
@Component
struct SearchExample {@State changeValue: string = ''@State submitValue: string = ''@State positionInfo: CaretOffset = { index: 0, x: 0, y: 0 }controller: SearchController = new SearchController()build() {Column({space: 10}) {Text('onSubmit:' + this.submitValue).fontSize(18).margin(15)Text('onChange:' + this.changeValue).fontSize(18).margin(15)Search({ value: this.changeValue, placeholder: 'Type to search...', controller: this.controller }).searchButton('SEARCH').width('95%').height(40).backgroundColor('#F5F5F5').placeholderColor(Color.Grey).placeholderFont({ size: 14, weight: 400 }).textFont({ size: 14, weight: 400 }).onSubmit((value: string) => {this.submitValue = value}).onChange((value: string) => {this.changeValue = value}).margin(20)Button('Set caretPosition 1').onClick(() => {// 设置光标位置到输入的第一个字符后this.controller.caretPosition(1)})Button('Get CaretOffset').onClick(() => {this.positionInfo = this.controller.getCaretOffset()})}.width('100%')}
}

search

示例2

// xxx.ets
@Entry
@Component
struct SearchExample {@State changeValue: string = ''@State submitValue: string = ''build() {Column() {Text('onSubmit:' + this.submitValue).fontSize(18).margin(15)Search({ value: this.changeValue, placeholder: 'Type to search...' }).searchButton('SEARCH').searchIcon({src: $r('app.media.search')}).cancelButton({style: CancelButtonStyle.CONSTANT,icon: {src: $r('app.media.cancel')}}).width('90%').height(40).maxLength(20).backgroundColor('#F5F5F5').placeholderColor(Color.Grey).placeholderFont({ size: 14, weight: 400 }).textFont({ size: 14, weight: 400 }).onSubmit((value: string) => {this.submitValue = value}).onChange((value: string) => {this.changeValue = value}).margin(20)}.width('100%')}
}

searchButton

示例3

// xxx.ets
@Entry
@Component
struct SearchExample {controller: SearchController = new SearchController()@State inputValue: string = ""// 自定义键盘组件@Builder CustomKeyboardBuilder() {Column() {Button('x').onClick(() => {// 关闭自定义键盘this.controller.stopEditing()})Grid() {ForEach([1, 2, 3, 4, 5, 6, 7, 8, 9, '*', 0, '#'], (item: number | string) => {GridItem() {Button(item + "").width(110).onClick(() => {this.inputValue += item})}})}.maxCount(3).columnsGap(10).rowsGap(10).padding(5)}.backgroundColor(Color.Gray)}build() {Column() {Search({ controller: this.controller, value: this.inputValue})// 绑定自定义键盘.customKeyboard(this.CustomKeyboardBuilder()).margin(10).border({ width: 1 })}}
}

customKeyboard

最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(Harmony NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

相关文章:

  • 前端开发者如何打造自己的生态以及ip
  • 哥斯拉流量webshell分析-->ASP/PHP
  • Docker 笔记(五)--链接
  • Qt 信号槽
  • 【学习学习】学习金字塔
  • IIS上部署.netcore WebApi项目及swagger
  • 行为型-观察者模式
  • php常用设计模式应用场景及示例
  • 超实用!免费软件站大盘点,总有一款适合你
  • 【兆易创新GD32H759I-EVAL开发板】 TLI(TFT LCD Interface)用法详细介绍
  • MySQL调优之SQL语句
  • 从历年315曝光案例,看APP隐私合规安全
  • el-form 的表单校验,如何验证某一项或者多项;validateField 的使用
  • 面试经典-34-验证回文串
  • Github主页设置贪吃蛇详细教程
  • 30天自制操作系统-2
  • CentOS 7 防火墙操作
  • exports和module.exports
  • Intervention/image 图片处理扩展包的安装和使用
  • Java多态
  • Laravel 中的一个后期静态绑定
  • leetcode-27. Remove Element
  • RxJS: 简单入门
  • Spring Cloud中负载均衡器概览
  • 测试如何在敏捷团队中工作?
  • 京东美团研发面经
  • 开发基于以太坊智能合约的DApp
  • 微服务框架lagom
  • 微服务入门【系列视频课程】
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 白色的风信子
  • AI算硅基生命吗,为什么?
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 扩展资源服务器解决oauth2 性能瓶颈
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #在 README.md 中生成项目目录结构
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)菜鸟学数据库(三)——存储过程
  • .net6Api后台+uniapp导出Excel
  • .NET开发者必备的11款免费工具
  • .Net通用分页类(存储过程分页版,可以选择页码的显示样式,且有中英选择)
  • .Net转前端开发-启航篇,如何定制博客园主题
  • @hook扩展分析
  • @RequestBody与@ResponseBody的使用
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [bzoj1038][ZJOI2008]瞭望塔
  • [bzoj1912]异象石(set)