概述
自定義鍵盤是一種替換系統(tǒng)默認鍵盤的解決方案,可實現(xiàn)鍵盤個性化交互。允許用戶結(jié)合業(yè)務(wù)需求與操作習(xí)慣,對按鍵布局進行可視化重構(gòu)、設(shè)置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護層面,自定義鍵盤可以增強用戶輸入的安全性,避免敏感信息被截取或者泄露。本文介紹了自定義鍵盤的實現(xiàn),并結(jié)合自定義鍵盤和系統(tǒng)鍵盤的切換、自定義鍵盤的布局避讓等場景,介紹了自定義鍵盤的實際使用方式。
自定義鍵盤的實現(xiàn)
自定義鍵盤的實現(xiàn)包括以下5個步驟:
自定義鍵盤布局實現(xiàn)
輸入控件綁定自定義鍵盤布局
自定義鍵盤輸入控制
自定義鍵盤光標(biāo)控制
自定義鍵盤彈出與收起
自定義鍵盤布局實現(xiàn)
自定義鍵盤的布局以自定義組件的方式呈現(xiàn),根據(jù)具體業(yè)務(wù)場景由開發(fā)者實現(xiàn)。自定義鍵盤的高度通過自定義組件根節(jié)點的height屬性設(shè)置,寬度不可設(shè)置,默認鋪滿屏幕。
@Component exportstructCustomKeyboard{ build() { Column() { } // 修改自定義組件根節(jié)點的height屬性 .height($r('app.float.keyboard_total_height')) } }
輸入控件綁定自定義鍵盤布局
輸入控件(TextArea、TextInput、RichEditor、Search)支持通過customKeyboard屬性綁定自定義鍵盤布局。綁定自定義鍵盤后,輸入控件獲取焦點時,不會拉起系統(tǒng)鍵盤,而是加載指定的自定義鍵盤。本文后續(xù)以TextInput控件為例進行介紹。
代碼示例如下:
build() { Column() { TextInput({ placeholder:'綁定自定義鍵盤', text:this.inputText, controller:this.textInputController }) // 綁定自定義鍵盤布局 .customKeyboard(this.customKeyboard()) } } @Builder customKeyboard() { CustomKeyboard() }
自定義鍵盤輸入控制
自定義鍵盤可以攔截手勢事件,通過對狀態(tài)變量的修改,實現(xiàn)文本的輸入。
以英文鍵盤為例,監(jiān)聽EnglishButton的onClick事件,修改狀態(tài)變量。
@Component struct EnglishButton { @ConsumeinputText: string; build() { Button(this.getEnglishText(this.item), { type: ButtonType.Normal }) .onClick(() => { // 攔截自定義鍵盤按鈕的點擊事件,根據(jù)業(yè)務(wù)場景修改狀態(tài)變量 this.inputText =this.keyBoardController.onInput(this.getEnglishText(this.item)); }) } }
通過對狀態(tài)變量inputText的修改,實現(xiàn)文本輸入。
@Component exportstructTextInputComponent{ @ProvideinputText:string=''; build() { Column() { TextInput({ placeholder:'綁定自定義鍵盤', text:this.inputText, controller:this.textInputController }) } } }
自定義鍵盤光標(biāo)控制
通過監(jiān)聽TextInput的onTextSelectionChange生命周期,獲取初始光標(biāo)位置、文本輸入后,調(diào)用TextInputController的caretPosition方法,設(shè)置最終光標(biāo)位置。
獲取光標(biāo)位置:
TextInput({ placeholder:'綁定自定義鍵盤', text:this.inputText, controller:this.textInputController }) // 監(jiān)聽光標(biāo)位置變化 .onTextSelectionChange((start:number, end:number) =>{ this.keyBoardController.setCaretPosition(start, end); })
設(shè)置光標(biāo)位置:
onChange(value: string) { this.text = value; if(this.keyBoardType !== Constants.SYSTEM_KEYBOARD) { // 設(shè)置光標(biāo)位置 this.textInputController?.caretPosition(this.targetCaretPos); } }
自定義鍵盤彈出與收起
通過對焦點進行控制,可以實現(xiàn)鍵盤的彈出和收起。開發(fā)者也可以通過TextInputController的stopEditing方法控制鍵盤關(guān)閉,下面的自定義鍵盤示例中,點擊確認按鍵關(guān)閉自定義鍵盤。
onInput(value:string):string{ switch(value) { case'確定': this.textInputController?.stopEditing(); break; } returnthis.text; }
自定義鍵盤和系統(tǒng)鍵盤的切換
當(dāng)需要實現(xiàn)同一個輸入框內(nèi)可以切換自定義鍵盤和系統(tǒng)鍵盤時,可以通過如下方式實現(xiàn):
Tab欄點擊“123”、“ABC”按鈕,this.isCustomKeyboardAttach為true,TextInput綁定自定義鍵盤;點擊“中文”按鈕,this.isCustomKeyboardAttach為false,切換系統(tǒng)鍵盤。
TextInput({ placeholder:'綁定自定義鍵盤', text:this.inputText, controller:this.textInputController }) .customKeyboard(this.isCustomKeyboardAttach ?this.customKeyboard() :null)
自定義鍵盤的布局避讓
使用系統(tǒng)提供的自定義鍵盤避讓功能
為了確保輸入框不被自定義鍵盤擋住,系統(tǒng)默認提供了輸入框避讓自定義鍵盤的能力。在TextInput組件的customKeyboard屬性設(shè)置supportAvoidance為true,開啟系統(tǒng)提供的自定義鍵盤避讓功能。
TextInput({ placeholder:'綁定自定義鍵盤', text:this.inputText, controller:this.textInputController }) .customKeyboard(this.customKeyboard(), { supportAvoidance:true})
系統(tǒng)默認的自定義鍵盤避讓功能只能保證輸入框不被遮擋,輸入框下方的組件可能會被自定義鍵盤擋住,如上圖中所示,輸入框下方的tab欄被自定義鍵盤擋住。為解決這一問題,需要開發(fā)者自己實現(xiàn)自定義鍵盤的避讓功能。
開發(fā)者自己實現(xiàn)自定義鍵盤的避讓功能
開發(fā)者需要監(jiān)聽自定義鍵盤根節(jié)點的onAreaChange生命周期,獲取自定義鍵盤的高度,根據(jù)實際場景設(shè)置布局的避讓。
總結(jié)
自定義鍵盤作為可定制化輸入解決方案,通過模塊化架構(gòu)實現(xiàn)系統(tǒng)鍵盤的功能替代,其核心價值在于支持按鍵布局的重構(gòu)與界面功能的自定義配置,同時集成場景化功能擴展模塊,顯著提升鍵盤輸入效率與操作舒適度,構(gòu)建輸入數(shù)據(jù)鏈路防護體系,有效規(guī)避敏感信息泄露風(fēng)險。
-
鍵盤
+關(guān)注
關(guān)注
4文章
866瀏覽量
40726 -
開發(fā)者
+關(guān)注
關(guān)注
1文章
647瀏覽量
17559 -
HarmonyOS
+關(guān)注
關(guān)注
80文章
2126瀏覽量
33155
原文標(biāo)題:HarmonyOS應(yīng)用自定義鍵盤解決方案
文章出處:【微信號:HarmonyOS_Dev,微信公眾號:HarmonyOS開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
HarmonyOS開發(fā)案例:【 自定義彈窗】

講解一下HarmonyOS中的幾個自定義組件用到的知識
工程技術(shù)筆記-彈出自定義鍵盤應(yīng)用
大彩串口屏彈出自定義鍵盤的應(yīng)用詳細資料免費下載

HarmonyOS 中的幾個自定義控件介紹
自定義視圖組件教程案例
使用基于云自定義IP的解決方案服務(wù)設(shè)計多媒體解決方案

使用基于IP的云自定義解決方案服務(wù)設(shè)計多媒體解決方案
自定義算子開發(fā)

評論