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

【每日学点鸿蒙知识】指纹识别隐藏背面、数组内部值变化刷新UI、键盘输入类型、跨组件路由、C++20特性支持

1、HarmonyOS 指纹识别情况下,隐藏背面内容?

有一个场景,在指纹识别验证页面时候,此时需要用户看不到背面的内容,请问应该怎么处理这块。或者有什么方案,可以通过window,获取到当前页面的page,这样可以显示一个遮挡view.

自定义弹窗 (CustomDialog)中,maskColor跟maskRect可以进行遮挡具体参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-methods-custom-dialog-box-V5#customdialogcontrolleroptions%E5%AF%B9%E8%B1%A1%E8%AF%B4%E6%98%8E

2、HarmonyOS @State修饰的数组内部的值变化了,怎么刷新UI?

pageDatas是一个@State修饰的复杂对象数组,当修改数组中的某个值时UI不会变化吗?是不是只有基本数据类型值改变时UI才会修改?如果是这样,应该怎么修改UI呢?
试过用DataSource的resetData也不行,首页用Swiper,获取网络数据后用resetData后是UI是有变化的,为什么这里不行?

在这里插入图片描述

要改变数组中对象的值需要用 @Observed和@ObjectLink。下面示例展示了数组对象的用法。
示例:

@Component
struct ViewA {
  // 子组件ViewA的@ObjectLink的类型是ClassA
  @ObjectLink a: ClassA;
  label: string = 'ViewA1';
  build() {
    Row() {
      Button(`ViewA [${this.label}] this.a.c = ${this.a.c} +1`)
        .onClick(() => {
          this.a.c += 1;
        })
    }
  }
}
@Entry
@Component
struct ViewB {
  // ViewB中有@State装饰的ClassA[]
  @State arrA: ClassA[] = [new ClassA(0), new ClassA(0)];
  build() {
    Column() {
      ForEach(this.arrA,
        (item: ClassA) => {
          ViewA({ label: `#${item.id}`, a: item })
        },
        (item: ClassA): string => item.id.toString()
      )
      // 使用@State装饰的数组的数组项初始化@ObjectLink,其中数组项是被@Observed装饰的ClassA的实例
      ViewA({ label: `ViewA this.arrA[first]`, a: this.arrA[0] })
      ViewA({ label: `ViewA this.arrA[last]`, a: this.arrA[this.arrA.length-1] })
      Button(`ViewB: reset array`)
        .onClick(() => {
          this.arrA = [new ClassA(0), new ClassA(0)];
        })
      Button(`ViewB: push`)
        .onClick(() => {
          this.arrA.push(new ClassA(0))
        })
      Button(`ViewB: shift`)
        .onClick(() => {
          this.arrA.shift()
        })
      Button(`ViewB: chg item property in middle`)
        .onClick(() => {
          this.arrA[Math.floor(this.arrA.length / 2)].c = 10;
        })
      Button(`ViewB: chg item property in middle`)
        .onClick(() => {
          this.arrA[Math.floor(this.arrA.length / 2)] = new ClassA(11);
        })
    }
  }
}
3、HarmonyOS 键盘InputType支持问题?

键盘输入类型不支持仅支持ASCII characters吗?

目前没有单独的键盘输入类型,可通过正则表达式设置输入过滤器(inputFilter),匹配表达式的输入允许显示,不匹配的输入将被过滤。仅支持单个字符匹配,不支持字符串匹配。参考链接如下:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-textinput.md#inputfilter8

4、HarmonyOS 关于router.pushNamedRoute还要引用对应的类这个问题?

场景是服务器下发name,然后我们进行跳转,实际上我们不知道他会跳转到哪个页面所以就要都import一遍能跳转的页面,导致代码冗余,或者能不能实现这些引用的类都写在一个类里面,然后在外部只需要引用这一个类就OK呢?

实现了一个全局路由工具类RouterUtil,它包含三种常用页面跳转类型:当前模块跳转,Har包页面跳转,Hsp包页面跳转。
样例代码如下:

import { router } from '@kit.ArkUI'
import { common } from '@kit.AbilityKit'

// 导入har包中的页面
import('library/Index');

class RouterUtil {
  routerTo(pageName: string) {
    switch (pageName) {
      case "HarPage":
      // 根据服务端下发的包名,确定需要跳转的har包页面
        router.pushNamedRoute({
          name: pageName
        })
        break
      case "CurHapPage":
      // 若为当前hap中的页面,可直接用pushUrl跳转
        router.pushUrl({
          url: `pages/${pageName}`
        })
        break
      case "HspPage":
      // 跳转对应Hsp页面
        let context = getContext() as common.UIAbilityContext
        router.pushUrl({
          url: `@bundle:${context.applicationInfo.name}/feature/ets/pages/${pageName}`
        })
        break
      default:
        break
    }
  }
}

let hspRouterUtil = new RouterUtil()
export default hspRouterUtil as RouterUtil


// 使用处 pages/Index.ets
import HspRouterUtil from '../common/util/RouterUtil'

@Entry
@Component
struct Index {

  build() {
    Column() {
      Text("router To HarPage")
        .fontSize(50)
        .margin({top: 20})
        .onClick(() => {
          HspRouterUtil.routerTo("HarPage")
        })

      Text("router To CurHapPage")
        .fontSize(50)
        .margin({top: 20})
        .onClick(() => {
          HspRouterUtil.routerTo("CurHapPage")
        })

      Text("router To HspPage")
        .fontSize(50)
        .margin({top: 20})
        .onClick(() => {
          HspRouterUtil.routerTo("HspPage")
        })
    }.width('100%').height('100%')
  }
}

对于Har包中的页面,需要开发者在对应Har包的<harName>Index.ets文件中注册需要导出的页面。

5、HarmonyOS HarmonyOS应用开发是否支持c++20?

clang目前版本是15.0.4,c++20部分支持,具体可参考:https://clang.llvm.org/cxx_status.html


http://www.kler.cn/a/452497.html

相关文章:

  • Windows下安装Rabbit MQ
  • 在 CentOS 8 系统上安装 Jenkins 的全过程
  • 《战神:诸神黄昏》游戏运行时提示找不到gamede.dll文件怎么办?gamede.dll丢失的修复指南
  • LabVIEW软件开发的未来趋势
  • 光谱相机的工作原理
  • 重温设计模式-外观模式和适配器模式的异同
  • 智谱BigModel研习社|搭建 AI 搜索引擎 - 使用免费的Web-Search-Pro+脑图Agent智能体
  • Gmsh有限元网格剖分(Python)---点、直线、平面的移动
  • STL 六大组件
  • 私域电商逆袭密码:AI 智能名片小程序与商城系统如何梦幻联动
  • 数据结构--堆的向上调整和向下调整
  • excel中如何筛选一列中重复的内容,相同的内容只保留一次
  • 2、C#基于.net framework的应用开发实战编程 - 设计(二、三) - 编程手把手系列文章...
  • Golang的发展历程
  • MFC/C++学习系列之简单记录11——树控件的使用
  • Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】
  • 工厂常用软件系统大全中英文全称对照表及功能介绍应用场景ERP MES WMS SCADA IOT SAP等软件系统介绍
  • 【从零开始入门unity游戏开发之——C#篇29】C#泛型(T)和 泛型约束
  • 前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?
  • 在 CentOS 8 系统上安装 Jenkins 的全过程
  • uniapp 项目基础搭建(vue2)
  • Python PDF转换工具箱(PDF转图片,word,拆分,删除,提取)
  • HarmonyOS NEXT 实战之元服务:静态案例效果---查看国际航班服务
  • RF分类-随机森林(Random Forest)
  • linux文件操作命令
  • 【C++决策和状态管理】从状态模式,有限状态机,行为树到决策树(二):从FSM开始的2D游戏角色操控底层源码编写