Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HarmonyOs开发:组件如何实现属性的动态设置

HarmonyOs开发:组件如何实现属性的动态设置

原创
作者头像
程序员一鸣
修改于 2025-01-08 03:10:19
修改于 2025-01-08 03:10:19
3470
举报

前言

运行环境:基于HarmonyOs NEXT

DevEco Studio:Build Version: 5.0.3.900

API:12

modelVersion:5.0.0

在很多的场景下,针对组件的属性,我们都需要动态来选择是否使用,比如组件的显示和隐藏,比如背景颜色改变的设置,高度的改变设置,字体大小的改变设置,等等,很多的场景下,都需要不同的状态来渲染我们的UI视图,在非声明式UI语言里,我们可以进行逻辑的判断也就是if/else语法,来控制组件的属性设置,比如在Android中,控制一个组件的显示与隐藏,我们就可以如下操作,伪代码如下:

代码语言:typescript
AI代码解释
复制
if(条件){
   显示
}else{
    隐藏
}

针对声明式语言,在ArkUI中,我们如何动态控制某些属性的设置呢?

针对动态属性的设置,目前总结了三种使用方式,可以满足不同的业务场景,也希望可以帮助到你。

方式一,三元运算符,直接动态设置属性。

比如我们要根据一个状态的判断,来动态的显示和隐藏某一个组件,我们就可以如下操作。

代码语言:typescript
AI代码解释
复制
.visibility(this.isVisibility ? Visibility.Visible : Visibility.None)

以上的代码,我们只需要控制isVisibility这个变量即可,针对其他的属性设置,比如颜色,大小,背景等等,所有的属性,使用方式基本一致,不在举例。

方式二,动态属性attributeModifier控制

针对方式一,有一个弊端,虽然说我们理论上控制了属性的状态切换,但无论是何种状态,这个属性我们必须要进行设置的,无非值不一样罢了,有没有方式,可以真正的控制某个属性的设置呢,翻找官方文档后,确实有,就是使用attributeModifier属性,来动态的设置某一个属性。

当然了,如果仅仅是简单的属性切换,比如背景,颜色,文字大小等等,使用方式一即可,方式二更倾向于,是否需要设置这个属性,而不是改变其属性的值,这一点大家需要注意。

比如,某种状态下,高度需要设置固定值,否则自适应,在比如,某种状态下需要侧滑属性,其他状态下不需要,在比如,某种状态下需要边框属性,其他状态下不需要,等等吧,应用场景是很多的,凡是某个属性需要动态设置,我们就可以使用attributeModifier,我们简单例举一个案例。

第一步,声明需要的动态属性,自定义类实现AttributeModifier接口,支持大部分的组件属性。

目前方法有多个,可以满足不同的业务场景:

代码语言:typescript
AI代码解释
复制
applyNormalAttribute(instance: T) : void//组件普通状态时的样式。

applyPressedAttribute(instance: T) : void//组件按压状态的样式。

applyFocusedAttribute(instance: T) : void//组件获焦状态的样式。

applyDisabledAttribute(instance: T) : void//组件禁用状态的样式。

applySelectedAttribute(instance: T) : void//组件选中状态的样式
代码语言:typescript
AI代码解释
复制
class MyTextModifier implements AttributeModifier<TextAttribute> {
  textHeight?: Length

  //组件普通状态时的样式。
  applyNormalAttribute(instance: TextAttribute): void {
    if (this.textHeight != undefined) {
      //不为空,设置height属性
      instance.height(this.textHeight)
    }
  }
}

第二步,直接使用即可:

代码语言:typescript
AI代码解释
复制
//定义变量
@State modifier: MyTextModifier = new MyTextModifier()

//组件使用
Text("文本描述")
  .attributeModifier(this.modifier)

//通过this.modifier,可以动态设置定义里面的属性

以上只是一个很简单的案例,实际的业务场景,大家根据需求自己实现即可。

方式三,多组件形式

声明式UI是支持条件渲染的,针对方式三,是可以同时满足方式一和方式二的,但有一点,不提倡,因为代码过于冗余,比如我们要实现一个组件的颜色设置:

代码语言:typescript
AI代码解释
复制
if(this.isColor){
  Text("文本描述").fontColor(Color.Red)
}else {
  Text("文本描述").fontColor(Color.Black)
}

方式三,不是属性的切换也不是值的切换,而是组件的整体替换,虽然可以实现我们想要的效果,但针对属性的动态控制却是不提倡的;但方式三更友好的存在于,组件的动态切换中,比如多条目展示中。

总结

如果是属性值的动态切换,使用方式一便可满足需求,如果是属性的动态设置,使用方式二即可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
鸿蒙开发:组件样式的复用
从以上的代码中,很明显的就能看出来,每个Text组件除了内容不一样之外,其它的样式属性都是重复存在的,此等案例,在实际的开发中,肯定会多次出现,虽然说,并不影响功能,但是,大量重复的样式代码,已经失去了代码的简洁性,也极大的增加了后续的代码维护,为了解决这一问题,还是建议大家能够把重复出现的样式,可以抽取出公共的样式。
程序员一鸣
2024/12/29
3420
鸿蒙开发:组件样式的复用
【HarmonyOS 5】AttributeModifier和AttributeUpdater详解
1. AttributeModifier是ArkUI组件的动态属性,提供属性设置功能。开发者可使用attributeModifier方法,通过自定义实现AttributeModifier<T>接口,来动态设置组件属性。
GeorgeGcs
2025/04/15
1410
【HarmonyOS 5】AttributeModifier和AttributeUpdater详解
HarmonyOS Next 浅谈页面渲染的性能优化
HarmonyOS Next 应用开发中,用户的使用体验至关重要。其中用户启动APP到呈现页面主要包含三个步骤:
万少
2025/02/09
980
HarmonyOS Next 浅谈页面渲染的性能优化
HarmonyOS 开发实践 —— 基于原生能力的组件封装
在开发应用程序时,我们经常需要使用各种组件来构建和展示用户界面。然而,直接使用原生的组件可能会导致代码冗余和难以维护。为了解决这个问题,基于原生能力的组件封装,将使我们更高效地开发应用程序。
小帅聊鸿蒙
2024/12/05
1340
纯血鸿蒙APP实战开发——跨文件样式复用和组件复用
本示例主要介绍了跨文件样式复用和组件复用的场景。在应用开发中,我们通常需要使用相同功能和样式的ArkUI组件,例如购物页面中会使用相同样式的Button按钮、Text显示文字,我们常用的方法是抽取公共样式或者封装成一个自定义组件到公共组件库中以减少冗余代码。
小帅聊鸿蒙
2025/01/06
1110
纯血鸿蒙APP实战开发——跨文件样式复用和组件复用
纯血鸿蒙APP实战开发——列表项交换案例
本案例通过List组件、组合手势GestureGroup、swipeAction属性以及attributeModifier属性等实现了列表项的交换和删除。
小帅聊鸿蒙
2025/01/18
1320
纯血鸿蒙APP实战开发——列表项交换案例
171.HarmonyOS NEXT系列教程之列表交换组件属性修改器详解
全栈若城
2025/03/22
1110
186.HarmonyOS NEXT系列教程之列表切换案例数据管理详解
这些内容帮助你理解列表切换案例的数据管理机制。下一篇将详细介绍列表交互和手势处理的实现。
全栈若城
2025/03/22
1430
170.HarmonyOS NEXT系列教程之列表交换组件基础架构解析
这些基础架构的设计为后续功能的实现提供了良好的基础。下一篇将详细介绍属性修改器的实现。
全栈若城
2025/03/22
1220
一年撸完百万行代码,企业微信的全新鸿蒙NEXT客户端架构演进之路
本文将要分享的是企业微信的鸿蒙Next客户端架构的演进过程,面对代码移植和API不稳定的挑战,提出了DataList框架解决方案。通过结构化、动态和认知三重熵减机制,将业务逻辑与UI解耦,实现数据驱动开发。采用MVDM分层架构(业务实体层、逻辑层、UI数据层、表示层),屏蔽系统差异,确保业务代码稳定。
JackJiang
2025/04/15
3160
一年撸完百万行代码,企业微信的全新鸿蒙NEXT客户端架构演进之路
纯血鸿蒙APP实战开发——图片九宫格封装案例
组件实现图片在不同个数情况下的布局效果(默认布局和自定义布局)。该场景多用于社交类应用。
小帅聊鸿蒙
2025/01/05
1300
纯血鸿蒙APP实战开发——图片九宫格封装案例
鸿蒙元服务项目实战:备忘录UI页面开发
之前写过一篇关于元服务项目的上架流程,为了更好的了解及开发元服务,准备从0到1简单开发一个小项目,也希望能够帮助到刚刚介入到鸿蒙开发的同学,具体项目呢,也是十分的简单,就是一个小巧的备忘录项目,可以编辑内容,可以展示已经编辑好的内容列表,开发上很快,一般半天到一天就可以搞定。
程序员一鸣
2024/12/28
2510
鸿蒙元服务项目实战:备忘录UI页面开发
鸿蒙(HarmonyOS)应用性能优化实战-组件复用四板斧
在滑动场景下,常常会对同一类自定义组件的实例进行频繁的创建与销毁。此时可以考虑通过组件复用减少频繁创建与销毁的能耗。组件复用时,可能存在许多影响组件复用效率的操作,本篇文章将重点介绍如何通过组件复用四板斧提升复用性能。
小帅聊鸿蒙
2024/10/16
2200
鸿蒙(HarmonyOS)应用性能优化实战-组件复用四板斧
HarmonyOS:ArkTS 多态样式自学指南
在日常的 ArkTS 应用开发工作中,我常常面临着为组件设置不同状态样式的需求。用户与界面进行交互时,如点击、按下、选中、禁用等操作,都希望组件能呈现出相应的视觉反馈,以提升用户体验。然而,传统的样式设置方式在处理这些动态变化时显得力不从心,代码变得冗长且难以维护。直到我接触到了 ArkTS 的多态样式,它为我提供了一种简洁而强大的解决方案,让我能够轻松地为组件设置不同状态下的样式。为了帮助更多开发者掌握这一实用的功能,我决定撰写这篇自学指南。
李游Leo
2025/03/31
1320
HarmonyOS:ArkTS 多态样式自学指南
鸿蒙开发:自定义一个搜索模版
在之前的文章中,我们简单分析了弹性布局Flex,并使用Flex实现了一个简单的流式布局,今天这篇文章,我们就结合搜索框,完成一个常见的搜索页面,具体的效果如下图所示:
程序员一鸣
2025/03/13
800
鸿蒙开发:自定义一个搜索模版
HarmonyOS NEXT 小说阅读器应用系列教程之底部菜单栏实现教程
在移动应用开发中,底部菜单栏是用户交互的重要组成部分,尤其对于阅读类应用来说,一个功能完善、交互友好的底部菜单栏能够极大提升用户体验。本教程将详细讲解如何在HarmonyOS应用中实现一个功能丰富的阅读应用底部菜单栏,包括翻页方式选择、界面设置等功能。
全栈若城
2025/05/20
980
HarmonyOS NEXT 小说阅读器应用系列教程之底部菜单栏实现教程
HarmonyOS 开发实践 —— 基于Refresh组件的下拉刷新
整体思路:首先需要用装饰器@builder自定义构建一个函数,然后跟refresh的接口builder进行绑定Refresh({refreshing:\$\$this.isRefreshing,builder:this.customRefreshComponent()}),最后将通过refresh的系列回调逐步实现下拉过程中图标的动态变化。
小帅聊鸿蒙
2024/11/26
3110
鸿蒙开发:实现popup弹窗
popup弹窗,可以说是一个很常见的功能,像上边的微信,以及很多的应用,都会存在这样的需求,鸿蒙原生Api中,对于popup弹窗,可以说实现起来特别的简单,直接使用提供的
程序员一鸣
2024/12/26
2810
鸿蒙开发:实现popup弹窗
鸿蒙(HarmonyOS)性能优化实战-合理选择条件渲染和显隐控制
开发者可以通过条件渲染或显隐控制两种方式来实现组件在显示和隐藏间的切换。本文从两者原理机制的区别出发,对二者适用场景分别进行说明,实现相应适用场景的示例并给出性能对比数据。
小帅聊鸿蒙
2024/10/21
2190
鸿蒙(HarmonyOS)性能优化实战-合理选择条件渲染和显隐控制
HarmonyOS 开发实践 —— 基于webview的嵌套滚动及与ArkUI组件的联动
将web组件放置在List或者Scroll组件中,通过web的嵌套滚动属性nestedScroll和Scroll的onScrollFrameBegin属性实现场景一的场景效果。
小帅聊鸿蒙
2024/12/17
1660
HarmonyOS 开发实践 —— 基于webview的嵌套滚动及与ArkUI组件的联动
推荐阅读
相关推荐
鸿蒙开发:组件样式的复用
更多 >
LV.4
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档