鸿蒙Harmony实战:ArkUI镜像能力规范

159 篇文章 0 订阅
159 篇文章 0 订阅

概述

为满足不同用户的阅读习惯,ArkUI提供了镜像能力。在特定情况下将显示内容在X轴上进行镜像反转,由从左向右显示变成从右向左显示。

镜像前镜像后

当组件满足以下任意条件时,镜像能力生效:

  1. 组件的direction属性设置为Direction.Rtl;

  2. 组件的direction属性设置为Direction.Auto,且当前的系统语言(如维吾尔语)的阅读习惯是从右向左。

基本概念

  • LTR:顺序为从左向右
  • RTL:顺序为从右向左

使用约束

ArkUI 如下能力已默认适配镜像:

类别

名称

基础组件

Swiper、Tab、TabContent、List、Progress、CalendarPicker、CalendarPickerDialog、TextPicker、TextPickerDialog、DatePicker、DatePickerDialog、Grid、WaterFlow、Scroll、ScrollBar、AlphabetIndexer、Stepper、SideBarContainer、Navigation、NavDestination、Rating、Slider、Toggle、Badge、Counter、Chip、SegmentButton、bindMenu、bindContextMenu、TextInput、TextArea、Search、Stack、GridRow、Text、Select、Marquee、Row、Column、Flex、RelativeContainer、ListItemGroup

高级组件

SelectionMenu 、TreeView 、Filter、SplitLayout、ToolBar、ComposeListItem、EditableTitleBar、ProgressButton、SubHeader 、Popup、Dialog、SwipeRefresher

通用属性

position、markAnchor、offset、alignRules、borderWidth、borderColor、borderRadius、padding、margin

接口

AlertDialog、ActionSheet、promptAction.showDialog、promptAction.showToast


界面布局、边框设置:关于方向类的通用属性,如果需要支持镜像能力,使用泛化的方向指示词 start/end 入参类型 替换 left/right、x/y等绝对方向指示词的入参类型,来表示自适应镜像能力。但如下三种场景还需要进行适配:

  1. Canvas组件只有限支持文本绘制的镜像能力。

  2. XComponent组件不支持组件镜像能力。

界面布局和边框设置

目前,以下三类通用属性需要使用新入参类型适配:

位置设置:position、markAnchor、offset、alignRules

边框设置:borderWidth、borderColor、borderRadius

尺寸设置:padding、margin

以position为例,需要把绝对方向x、y描述改为新入参类型start、end的描述,其他属性类似。

import { LengthMetrics } from '@kit.ArkUI';

@Entry
@Component
struct Index1 {
  build() {
    Stack({ alignContent: Alignment.TopStart }) {
      Stack({ alignContent: Alignment.TopStart }) {
        Column()
          .width(100)
          .height(100)
          .backgroundColor(Color.Red)
          .position({ start: LengthMetrics.px(200), top: LengthMetrics.px(200) })  //需要同时支持LTR和RTL时使用API12新增的LocalizedEdges入参类型,
                                                                                   //仅支持LTR时等同于.position({ x: '200px', y: '200px' })

      }.backgroundColor(Color.Blue)
    }.width("100%").height("100%").border({ color: '#880606' })
  }
}

自定义绘制Canvas组件

Canvas组件的绘制内容和坐标均不支持镜像能力。已绘制到Canvas组件上的内容并不会跟随系统语言的切换自动做镜像效果。

CanvasRenderingContext2D的文本绘制支持镜像能力,在使用时需要与Canvas组件的通用属性direction(组件显示方向)和CanvasRenderingContext2D的属性direction(文本绘制方向)协同使用。具体规格如下:

  1. 优先级:CanvasRenderingContext2D的direction属性 > Canvas组件通用属性direction > 系统语言决定的水平显示方向。
  2. Canvas组件本身不会自动跟随系统语言切换镜像效果,需要应用监听到系统语言切换后自行重新绘制。
  3. CanvasRenderingContext2D绘制文本时,只有符号等文本会对绘制方向生效,英文字母和数字不响应绘制方向的变化。
import { BusinessError, commonEventManager } from '@kit.BasicServicesKit';

@Entry
@Component
struct Index {
  @State message: string = 'Hello world';
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)

  aboutToAppear(): void {
    // 监听系统语言切换
    let subscriber: commonEventManager.CommonEventSubscriber | null = null;
    let subscribeInfo2: commonEventManager.CommonEventSubscribeInfo = {
      events: ["usual.event.LOCALE_CHANGED"],
    }
    commonEventManager.createSubscriber(subscribeInfo2, (err: BusinessError, data: commonEventManager.CommonEventSubscriber) => {
      if (err) {
        console.error(`Failed to create subscriber. Code is ${err.code}, message is ${err.message}`);
        return;
      }

      subscriber = data;
      if (subscriber !== null) {
        commonEventManager.subscribe(subscriber, (err: BusinessError, data: commonEventManager.CommonEventData) => {
          if (err) {
            console.error(`订阅语言地区状态变化公共事件失败. Code is ${err.code}, message is ${err.message}`);
            return;
          }
          console.info('成功订阅语言地区状态变化公共事件: data: ' + JSON.stringify(data))
          // 监听到语言切换后,需要重新绘制Canvas内容
          this.drawText();
        })
      } else {
        console.error(`MayTest Need create subscriber`);
      }
    })
  }

  drawText(): void {
    console.error("MayTest drawText")
    this.context.reset()
    this.context.direction = "inherit"
    this.context.font = '30px sans-serif'
    this.context.fillText("ab%123&*@", 50, 50)
  }

  build() {
    Row() {
      Canvas(this.context)
        .direction(Direction.Auto)
        .width("100%")
        .height("100%")
        .onReady(() =>{
          this.drawText()
        })
        .backgroundColor(Color.Pink)
    }
    .height('100%')
  }

}
镜像前镜像后

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

点击→【纯血版鸿蒙全套最新学习资料】希望这一份鸿蒙学习资料能够给大家带来帮助!~


 鸿蒙(HarmonyOS NEXT)最新学习路线

该路线图包含基础技能、就业必备技能、多媒体技术、六大电商APP、进阶高级技能、实战就业级设备开发,不仅补充了华为官网未涉及的解决方案

路线图适合人群:

IT开发人员:想要拓展职业边界
零基础小白:鸿蒙爱好者,希望从0到1学习,增加一项技能。
技术提升/进阶跳槽:发展瓶颈期,提升职场竞争力,快速掌握鸿蒙技术

点击→纯血版全套鸿蒙HarmonyOS学习资料

2.视频学习资料+学习PDF文档

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、(南向驱动、嵌入式等)鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

HarmonyOS Next 最新全套视频教程

​​

 

 大厂面试必问面试题

​​

鸿蒙南向开发技术

​​

鸿蒙APP开发必备

​​

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

​​

《鸿蒙开发基础》

​​

《鸿蒙开发进阶》

《鸿蒙进阶实战》

​​


点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,才能在这个变革的时代中立于不败之地。 

华为鸿蒙系统正式版PC下载是华为官方打造的操作系统,是建立在linux开源内核的基础上开发的,华为鸿蒙系统正式版PC下载不仅仅内置了火狐、谷歌、opera等主流浏览器的使用,还会为用户带来自带的办公软件使用,方便快捷,无需另外下载安装使用,可支持的游戏也是非常的多的,不会有广告、捆绑的软件,绿色安全可靠,是当前非常受欢迎的一款操作系统。 华为鸿蒙系统正式版PC下载介绍: 华为鸿蒙系统正式版PC下载基于微内核的全场景分布式的操作系统,鸿蒙操作系统将基于四个框架为主题,分别是:分布架构、天生流畅、内核安全、生态共享,精简代码结构,将系统的代码全部都进行分布并细化处理,全面解决系统响应缓慢,操作简单,容易上手。 华为鸿蒙系统正式版PC下载亮点: 1、在智慧屏幕、穿戴设备、车机专有服务、音箱、手机等都会进行终端的无缝协同的体验。 2、还率先采用了高性能的IPC技术,将彻底解决系统性能不足、卡顿的问题。 3、Harmony鸿蒙OS采用全新的微内核的射击,保证系统流畅和信息安全这两块巨头。 4、是全世界第一个基于微内核的全场景OS,有分布式架构支撑,能带来天生流畅、内核级的安全和生态共享。 华为鸿蒙系统正式版PC下载四个框架说明: 1、分布架构 将每一个大的系统框架进行更为细致的细化,让应用对于软件的响应程度微乎其微,直接的提高了系统的使用效率。 2、天生流畅 精简大量底层的系统冗余程序代码,还原用户的系统体验流畅度。 3、内核安全 将在关键的用户交互方面下功夫,在用户与系统软件的交互方面,放置多层由安全中心响应的源生代码,从源头保证系统的整体安全。 4、生态共享 在每一个智能的终端设备上,都会就行在交互方面的自动适配,自动寻找最符合条件的那个设备。 华为鸿蒙系统正式版PC下载安装方法: 1.插入U盘,打开U盘制作软件rufus 3.1 2.入设备选项,选中下载的华为鸿蒙系统镜像文件,其他默认,点击开始。 3.链接下载点击是,勾选以ISO镜像模式写入。 4.点击OK,等待U盘启动制作并写入华为鸿蒙系统完成。 5.把制作好的U盘插入电脑,开机启动按F12,选择U盘启动,台式机一般为:Delete键笔记本一般为:F2键惠普笔记本一般为:F10键联想笔记本一般为:F12键苹果电脑为:C键。 6.从U盘启动后,选择“Start Newstart Dev”进入安装。 7.系统会进入到安装界面,我们点击“安装系统”开始安装。 8.选择将华为鸿蒙系统安装所在硬盘分区,再点击下一步。 9.设置完管理员密码后,在右下角点击“开始安装”进行安装系统。 10.进入安装,10多分钟就安装完成了,非常简单。安装过程中请保证电脑电量,而且不能拨插U盘,否则得重来。 11.安装成功后,点击“重启”,拨出U盘,系统重启后就进入登录界面,输入先前创建的用户名及密码,就可以体验华为鸿蒙系统。 华为鸿蒙系统正式版PC下载测评: 1、面向多终端设计,并且开源。可打通智慧屏、可穿戴设备、车机、音响、手机等。 2、能够实现每一个电子终端的资源互享,带来用户体验最佳的协同感。 3、系统软件轻量化、功能强大,将在大量的智能终端上进行率先应用。 4、通过对原生态的系统进行精简,删减掉那些用户在日常生活中用不到系统软件,还原系统的流畅度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值