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

【每日学点鸿蒙知识】ets匿名类、获取控件坐标、Web显示iframe标签、软键盘导致上移、改变Text的背景色

1、HarmonyOS ets不支持匿名类吗?

不支持,需要显式标注对象字面量的类型,可以参考以下文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/typescript-to-arkts-migration-guide-V5#%E9%9C%80%E8%A6%81%E6%98%BE%E5%BC%8F%E6%A0%87%E6%B3%A8%E5%AF%B9%E8%B1%A1%E5%AD%97%E9%9D%A2%E9%87%8F%E7%9A%84%E7%B1%BB%E5%9E%8B

需要显式标注对象字面量的类型
**规则:**arkts-no-untyped-obj-literals
级别:错误

在ArkTS中,需要显式标注对象字面量的类型,否则,将发生编译时错误。在某些场景下,编译器可以根据上下文推断出字面量的类型。
在以下上下文中不支持使用字面量初始化类和接口:

  • 初始化具有any、Object或object类型的任何对象
  • 初始化带有方法的类或接口
  • 初始化包含自定义含参数的构造函数的类
  • 初始化带readonly字段的类

建议使用嵌套类实现(类内部嵌套匿名类)。因为使用匿名类创建的对象类型未知,这与ArkTS不支持structural typing和对象字面量的类型冲突,可以参考以下方案

export interface IVoiceRecordListener<T> {
  onSuccess:(t: T)=> void
  onFailed:(code: string, reason: string)=> void
}

let voiceRecordListenerInstance: IVoiceRecordListener<void> = {
  onSuccess: () => {
    console.log('success')
  },
  onFailed: () => {
    console.log('failed')
  }
}
2、HarmonyOS 获取控件坐标?

业务开发中往往需要在某个控件渲染完之后根据当前控件的位置canvas绘制相应图形,请问需要怎么获取坐标呢?

componentUtils.getRectangleById 可以获取根据组件ID获取组件实例对象, 通过组件实例对象将获取的坐标位置和大小同步返回参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-arkui-componentutils-V5#componentutilsgetrectanglebyid

componentUtils.getRectangleById
getRectangleById(id: string): ComponentInfo

根据组件ID获取组件实例对象, 通过组件实例对象将获取的坐标位置和大小同步返回给开发者。

3、HarmonyOS 使用webview加载H5页面时,页面内容包含iframe标签,无法正常显示?

包含这样一段标签 :<iframe src='[https://media.w3.org/2010/05/...](https://link.segmentfault.com/?enc=VG0pIZ2DYxAsfv21K5dq2w%3D%3D.MAmkKu9OfP%2FA6wTIM30bxp8UOf4jEyAeTTF8hjO5CAms%2FiZHPg3m7d2nv5hvqKwl)' ><iframe>

参考下面代码:

// xxx.ets
import web_webview from '@ohos.web.webview';

@Entry
@Component
struct WebComponent {
  controller: web_webview.WebviewController = new web_webview.WebviewController();

  build() {
    Column() {
      Web({ src: $rawfile("index.html"), controller: this.controller })
        .fileAccess(true)
        .domStorageAccess(true)
    }
  }
}

<!-- index.html -->
<!DOCTYPE html>
<html>
<body>
<p>Hello World</p>
<div>这底下是一个iframe</div>
<iframe src='https://media.w3.org/2010/05/sintel/trailer.mp4'></iframe>
</body>
</html>
4、HarmonyOS textInput组件获取焦点,软键盘弹出,整个界面会整体上移问题?

textInput组件获取焦点,软键盘弹出,整个界面会整体上移问题

设置压缩模式即可,参考文档链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-expand-safe-area-V5#ZH-CN_TOPIC_0000001893369025__%E7%A4%BA%E4%BE%8B3
安全区域是指页面的显示区域,默认不与系统设置的非安全区域比如状态栏、导航栏区域重叠,默认情况下开发者开发的界面都被布局在安全区域内。提供属性方法允许开发者设置组件绘制内容突破安全区域的限制,通过expandSafeArea属性支持组件不改变布局情况下扩展其绘制区域至安全区外,通过设置setKeyboardAvoidMode来配置虚拟键盘弹出时页面的避让模式。页面中有标题栏等文字不希望和非安全区重叠时,建议对组件设置expandSafeArea属性达到沉浸式效果,也可以直接通过窗口接口setWindowLayoutFullScreen设置沉浸式。

5、HarmonyOS 2个TextInput控件,当TextInput输入都有值时,改变Text的背景色?

参考代码:

@Entry
@Component
struct TextInputDemo {
  @State message: string = 'Hello World';
  @State text1: string = ''
  @State text2: string = ''
  @State changeColoor : boolean=false
  controller: TextInputController = new TextInputController()

  build() {
    Column(){
      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .backgroundColor(this.changeColoor ? Color.Red: '')
      TextInput({ text: this.text1, placeholder: 'input your word1...', controller: this.controller })
        .width('95%')
        .height(40)
        .margin(20)
        .onChange((value: string)=>{
          this.text1 = value
          if(this.text2 && this.text1){
            this.changeColoor = true
          }else{
            this.changeColoor = false
          }

        })
      TextInput({ text: this.text2, placeholder: 'input your word2...', controller: this.controller })
        .width('95%')
        .height(40)
        .margin(20)
        .onChange((value: string)=>{
          this.text2 = value
          if(this.text1 && this.text2){
            this.changeColoor = true
          }else {
            this.changeColoor = false
          }
        })
    }
    .height('100%')
    .width('100%')
  }
}

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

相关文章:

  • win11 vs2022 opencv 4.10使用vs Image Watch插件实时可视化内存mat对象
  • 跟我学C++中级篇——std::shared_lock
  • 安装教程:慧集通集成平台(DataLinkX)智能体客户端安装操作(Linux/windows/mac)
  • Windows安装Confluence详解
  • LinuxC高级day2
  • Qt天气预报系统设计界面布局第四部分左边
  • 【Node】什么是Node,及基础使用
  • redis用途都有哪些
  • 《SwiftUI 实现点击按钮播放 MP3 音频》
  • 低空经济与数据资产入表的联系
  • llamafactory报错:双卡4090GPU,训练qwen2.5:7B、14B时报错GPU显存不足(out of memory),轻松搞定~~~
  • Android 学习小记1
  • plantuml 信号时序图
  • 重装操作系统后 Oracle 11g 数据库数据还原
  • 深入理解Android中的ImageReader与JNI交互
  • Android笔试面试题AI答之Android基础(6)
  • 【深度学习基础之多尺度特征提取】多尺度图像增强(Multi-Scale Image Augmentation)是如何在深度学习网络中提取多尺度特征的?附代码
  • DAY176内网对抗-信息收集篇SPN扫描DC定位角色区域定性服务探针安全防护凭据获取
  • 《C++设计模式》策略模式
  • 应用层1——C/S、P2P、DNS域名系统
  • 【Rust自学】5.2. struct使用例(加打印调试信息)
  • 使用 Spring Boot 和 GraalVM 的原生镜像
  • Ubuntu 22.04 升级 24.04 问题记录
  • 使用 OpenCV 在图像中添加文字
  • oscp备战系列-Kioptrix2014
  • Oracle Managed Files(OMF)