【鸿蒙实战开发】基于webview拉起自定义键盘

场景描述

在特殊的H5场景下需要应用拉起自定义键盘进行输入。

场景一:使用jsBridge拉起自定义弹窗写自定义键盘,再通过jsBridge传参实现输入。

场景二:使用web的同层渲染将原生textInput组件渲染到页面上。

方案描述

通过注册一个js代理对象被web的registerJavaScriptProxy方法调用拉起CustomDialog,在CustomDialog上放置一个customkeyboard

场景一: 通过jsBridge拉起自定义弹窗,在自定义弹窗上放置自定义键盘,例如需要输入密码时的安全键盘

效果图

方案

通过注册一个js代理对象被web的registJavaScriptProxy方法调用拉起CustomDialog,在CustomDialog上放置一个自定义键盘组件,通过在H5上input标签的readonly属性和注册的js方法changeNumbers实现在原生端输入数字传到H5上,他们之间通过@Link装饰器绑定的变量进行传值,所以点击删除输入的内容也是可以在H5上实现的。

核心代码

  1. 通过javaScriptProxy方法拉起自定义弹窗,在H5上的input标签绑定一个onclick事件,当点击输入框后会调用从原生注册过来的js代理方法openWindow。
    <input type="text" name="number_info" readonly onclick="openWindow()" value="" style="width: 500px;height: 100px;font-size:50px;border:1px solid # f00;">

    <script>

    function openWindow() {

    let value = document.getElementsByName("number_info")[0].value;

    window.myJsb.openDialog(value)

    }

    </script>
  1. 当H5上openWindow方法被调用后会通过jsBridge调用以下两个js代理方法打开自定义弹窗。
    jsbObject: JsbObject = {

    openDialog: (value: string) => {

    this.showDialog(this, value);

    }

    }

    showDialog(context: object, value: string) {

    // 把自定义弹窗调出来

    this.currentData = value;

    this.dialogController.open()

    }

    Web({ src: "resource://rawfile/web_test.html", controller: this.webviewController })

    .javaScriptAccess(true)

    .javaScriptProxy({

    name: "myJsb",

    object: this.jsbObject,

    methodList: ["openDialog"],

    controller: this.webviewController

    })
  1. 将自定义键盘放置在自定义弹窗上。
    @CustomDialog

    struct CustomDialogExample {

    @Link currentData: string

    dialogControllerTwo: CustomDialogController | null = new CustomDialogController({

    builder: CustomDialogExample({ currentData: $currentData }),

    alignment: DialogAlignment.Bottom,

    offset: { dx: 0, dy: -25 }

    })

    controller?: CustomDialogController

    build() {

    Column() {

    Button('x').onClick(() => {

    // 关闭自定义键盘

    if (this.controller != undefined) {

    this.cont
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值