鸿蒙开发:自定义一个车牌省份简称键盘

简介: 鸿蒙搞起来就比较的简单,直接一个Grid组件便可以搞定,最后的删除按钮,使用布局选项GridLayoutOptions便可轻松实现。

前言

之前针对车牌省份简称键盘,在Android系统中搞过一个,当时使用的是组合View的形式,考虑到最后一个删除按钮单独占两个格子,做了特殊处理,单独设置了权重weight和单独设置了宽度width,既然鸿蒙系统的应用开发了,于是比葫芦画瓢,把Android版的车牌键盘,用鸿蒙再封装一下。


鸿蒙搞起来就比较的简单,直接一个Grid组件便可以搞定,最后的删除按钮,使用布局选项GridLayoutOptions便可轻松实现。


本篇文章大致如下:


1、设置GridLayoutOptions,规划键盘摆放

2、设置属性和方法,制定可扩展效果

3、开源后的简单使用

4、使用总结


一、设置GridLayoutOptions,规划键盘摆放


我们最主要的是最后一行的删除按钮,让删除按钮独占两列,我们就可以这样设置GridLayoutOptions。


layoutOptions: GridLayoutOptions = {
    regularSize: [1, 1],
    irregularIndexes: [this.mLicensePlateList.length - 1],
    onGetIrregularSizeByIndex: (_: number) => {
      return [1, 4]
    }
  }


regularSize:大小规则的GridItem在Grid中占的行数和列数,只支持占1行1列即[1, 1]。

最重要的参数是irregularIndexes和onGetIrregularSizeByIndex,irregularIndexes表示的是指定的GridItem索引在Grid中的大小是不规则的,比如我们设置的是最后一个格子,那么就把最后一个格子的索引设置上即可,当然,它是一个数组,在实际的开发中,可以动态的设置;onGetIrregularSizeByIndex是配合irregularIndexes使用,设置不规则GridItem占用的行数和列数,由于我们一行10个,最后一行时,最后是空出了4列,当然,这里我的处理是,直接最后一个占4列,然后在判断索引,设置删除按钮即可,当然,还有其它的处理方式。


首先,定义数据时,需要给数据增加一个空数据,用于最后一个元素的单独设置。

private mLicensePlateList = ["京", "津", "渝", "沪", "冀", "晋", "辽", "吉", "黑", "苏",
    "浙", "皖", "闽", "赣", "鲁", "豫", "鄂", "湘", "粤", "琼",
    "川", "贵", "云", "陕", "甘", "青", "蒙", "桂", "宁", "新",
    "藏", "使", "领", "学", "港", "澳", ""]


然后在ForEach遍历的时候,针对最后一个索引,单独设置删除按钮,非最后一个元素正常展示即可。


if (index == this.mLicensePlateList.length - 1) {
              Row() {
                Column() {
                  Image(this.deleteIconSrc)
                    .width(this.deleteIconWidth)
                }
                .width(this.deleteWidth)
                .height("100%")
                .backgroundColor(Color.White)
                .borderRadius(2)
                .justifyContent(FlexAlign.Center)
              }
              .width("100%")
              .height("100%")
              .justifyContent(FlexAlign.End)
              .onAreaChange((_: Area, newValue: Area) => {
                this.deleteWidth = Number(newValue.width) / 2 - Number(this.columnsGap) / 2
              })
            }


二、设置属性和方法,制定可扩展效果


如果仅仅只是自己使用,大可不必扩展,只适配自身应用即可,但是如果想要其他人或者其他应用进行使用,那么属性的扩展是很有必要的,毕竟每行展示几个,每个格子的背景,颜色、大小等等都是不一样的,我们可以把必须的这些因素,通过属性的形式暴露出去,尽量满足多需求的保障。


具体的各个属性,直接看第三项中的描述即可。


三、开源后的简单使用


1、远程依赖


方式一:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。


建议:在使用的模块路径下进行执行命令。


ohpm install @abner/keyboard


方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:


"dependencies": { "@abner/keyboard": "^1.0.0"}



查看是否引用成功


无论使用哪种方式进行依赖,最终都会在使用的模块中,生成一个oh_modules文件,并创建源代码文件,有则成功,无则失败,如下:



2、快速使用


LicensePlateView({
  onItemClick: (item: string, index: number) => {
    //点击事件
    console.log("=====点击内容:" + item + "===点击索引:" + index)
  },
  onDelete: () => {
    //点击删除
    console.log("=====点击删除")
  }
})


属性介绍


属性

类型

概述

onItemClick

(item: string, index: number) => void

点击条目回调

onDelete

() => void

点击删除回调

onComplete

(item: string) => void

点击完成回调

rowsGap

Length

行间距

columnsGap

Length

列间距

columnSize

number

展示几列,默认是10列

bgColor

ResourceColor

背景颜色

marginLeft

Length

距离左边

marginRight

Length

距离右边

rectHeight

Length

每个格子高度

titleHeight

Length

标题栏高度

rootHeight

Length

键盘整体的高度

gridMarginTop

Length

网格距离顶部

gridMarginBottom

Length

网格距离底部

completeTextColor

ResourceColor

完成按钮的颜色

completeFontSize

number/string/ Resource

完成文字大小

isShowComplete

boolean

是否显示完成按钮

rectBgColor

ResourceColor

格子背景

rectSelectBgColor

ResourceColor

格子选中背景

rectBorderWidth

Length

格子边框宽度

rectBorderRadius

Length

格子圆角

rectBorderColor

ResourceColor

格子边框颜色

rectBorderSelectColor

ResourceColor

格子选中边框颜色

rectTextSize

Length

格子的文字大小

rectTextColor

Length

格子文字的默认颜色

rectSelectTextColor

ResourceColor

格子文字的选中颜色

prohibit

boolean

是否禁止后面的车牌简称

deleteIconWidth

Length

删除图片宽度

deleteIconSrc

PixelMap/ResourceStr/ DrawableDescriptor

删除icon资源


四、使用总结


目前的LicensePlateView只是一个组件,也就是一个View,你可以把它放到任何的UI布局中,比如自定义的页面,自定义的弹窗等等,当然了,后续,我也会扩展出类似于软键盘形式的弹出方式,可以关注下一个版本。

相关文章
|
2天前
鸿蒙开发:了解@Builder装饰器
@Builder装饰是鸿蒙UI开发中,非常重要的一个装饰器,在实际的开发中,合理且正确的使用,能够让我们的代码更加的简洁,有两点需要注意,一是,是用私有还是全局,取决于当前的组件的复用机制,如果多个页面都使用了,建议以全局为主;二是传参的动态更新,有更新就使用引用参数传递,没有更新按值传递即可。
48 28
|
1月前
|
存储 人工智能 JavaScript
Harmony OS开发-ArkTS语言速成二
本文介绍了ArkTS基础语法,包括三种基本数据类型(string、number、boolean)和变量的使用。重点讲解了let、const和var的区别,涵盖作用域、变量提升、重新赋值及初始化等方面。期待与你共同进步!
109 47
Harmony OS开发-ArkTS语言速成二
|
2月前
|
前端开发 API 数据库
鸿蒙开发:异步并发操作
在结合async/await进行使用的时候,有一点需要注意,await关键字必须结合async,这两个是搭配使用的,缺一不可,同步风格在使用的时候,如何获取到错误呢,毕竟没有catch方法,其实,我们可以自己创建try/catch来捕获异常。
105 3
鸿蒙开发:异步并发操作
|
1月前
|
存储 JSON 区块链
【HarmonyOS NEXT开发——ArkTS语言】购物商城的实现【合集】
HarmonyOS应用开发使用@Component装饰器将Home结构体标记为一个组件,意味着它可以在界面构建中被当作一个独立的UI单元来使用,并且按照其内部定义的build方法来渲染具体的界面内容。txt:string定义了一个名为Data的接口,用于规范表示产品数据的结构。src:类型为,推测是用于引用资源(可能是图片资源等)的一种特定类型,用于指定产品对应的图片资源。txt:字符串类型,用于存放产品的文字描述,比如产品名称等相关信息。price:数值类型,用于表示产品的价格信息。
58 5
|
1月前
|
开发工具 开发者 容器
【HarmonyOS NEXT开发——ArkTS语言】欢迎界面(启动加载页)的实现【合集】
从ArkTS代码架构层面而言,@Entry指明入口、@Component助力复用、@Preview便于预览,只是初窥门径,为开发流程带来些许便利。尤其动画回调与Blank组件,细节粗糙,后续定当潜心钻研,力求精进。”,字体颜色为白色,字体大小等设置与之前类似,不过动画配置有所不同,时长为。,不过这里没有看到额外的动画效果添加到这个特定的图片元素上(与前面带动画的元素对比而言)。这是一个显示文本的视图,文本内容为“奇怪的知识”,设置了字体颜色为灰色(的结构体,它代表了整个界面组件的逻辑和视图结构。
53 1
|
移动开发 Ubuntu 网络协议
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(中)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令
199 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(中)
|
XML Web App开发 开发框架
鸿蒙开发入门 | 开发第一个鸿蒙应用+页面跳转
准备好鸿蒙开发环境后,接下来就需要创建鸿蒙项目,掌握项目的创建过程以及配置。项目创建好后,需要把项目运行在模拟器上,鸿蒙的模拟和安卓模拟器有些不同,鸿蒙提供远程模拟器和本地模拟器,通过登录华为账号登录在线模拟器,使用DevEco Studio可将项目部署到远程模拟器中。
1319 1
鸿蒙开发入门 | 开发第一个鸿蒙应用+页面跳转
|
存储 Ubuntu 前端开发
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(下)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令
365 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(下)
|
存储 编解码 Ubuntu
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(上)
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令
259 0
嵌入式linux/鸿蒙开发板(IMX6ULL)开发 (二)Ubuntu操作入门与Linux常用命令(上)
|
开发工具
HarmonyOS(鸿蒙)开发一文入门
HarmonyOS(鸿蒙)开发一文入门
190 0
HarmonyOS(鸿蒙)开发一文入门

热门文章

最新文章