鸿蒙UI开发——组件的可见性控制

1、概 述

我们在UI开发中不可避免会遇到组件的显示和隐藏状态的切换,为了高效地控制组件的显示状态,ArkTs提供了visibility属性。接下来对visibility做简单介绍。

2、使用介绍

visibility接口定义如下:

控制当前组件显示或隐藏。根据具体场景需要可使用条件渲染代替。默认值:Visibility.Visible

// 控制组件的显隐。visibility(value: Visibility)

Visibility是一个枚举,定义如下:

Hidden // 隐藏,但参与布局进行占位。Visible // 显示。None // 隐藏,但不参与布局,不进行占位。

其中,Hidden与None需要注意;

  • 当Visibility属性为Hidden时:展示效果可以类比为组件变成了全透明,即:占用的位置与空间都保留,只是组件看不见。

  • 当Visibility属性为None时:展示效果可以类比为组件完全不存在,即:完全不在界面中,不占空间也不占位置。

有前端开发经验的朋友来看。

属性值为Hidden时,显示效果与css样式设置visibility: hidden一致;

属性值为None时,显示效果与css样式display: none一致;

Hidden与None在性能上的区别:

  • Visibility为None的重排代价相对较高。因为当一个元素的属性改变为none或者从none变为其他值时,渲染过程需要重新计算界面中其他元素的位置和大小,这个过程可能会比较复杂(特别是在复杂的页面布局中)

  • Visibility:Hidden只会引起重绘,因为元素的位置和大小没有改变,只是它的可见性发生了变化。重绘的性能开销相对重排要小一些。

👉🏻 demo

示例效果如下:

图片

代码如下(10、14、18行代码):​​​​​​​

// xxx.ets@Entry@Componentstruct VisibilityExample {  build() {    Column() {      Column() {        // 隐藏不参与占位        Text('None').fontSize(9).width('90%').fontColor(0xCCCCCC)        Row().visibility(Visibility.None).width('90%').height(80).backgroundColor(0xAFEEEE)        // 隐藏参与占位        Text('Hidden').fontSize(9).width('90%').fontColor(0xCCCCCC)        Row().visibility(Visibility.Hidden).width('90%').height(80).backgroundColor(0xAFEEEE)        // 正常显示,组件默认的显示模式        Text('Visible').fontSize(9).width('90%').fontColor(0xCCCCCC)        Row().visibility(Visibility.Visible).width('90%').height(80).backgroundColor(0xAFEEEE)      }.width('90%').border({ width: 1 })    }.width('100%').margin({ top: 5 })  }}

从效果中我们看到:

  • 第10行代码中将Visibility设置为None,Row在界面中没有占据任何空间。(底部Hidden与None紧挨着,中间没有Row的空隙)

  • 第14行代码中,将Visibility设置为Hidden,Row在界面中没有显示出来,但高度所占的空间是保留了下来。

  • 第18行代码中,Visibility设置为Visible,效果正常显示。

### 鸿蒙 OS 开发信息发布系统教程 #### 创建项目结构 在鸿蒙操作系统上开发信息发布系统时,建议采用模块化设计来提升项目的可维护性和扩展性。可以将整个应用程序分为多个功能模块,比如用户认证、信息管理、通知推送等。 #### 用户界面设计 对于信息发布系统的前端部分,应该注重用户体验的设计。考虑到不同设备屏幕尺寸的支持,在布局文件中使用自适应UI组件是非常重要的[^1]。例如: ```xml <?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical"> <!-- 发布按钮 --> <Button ohos:id="$+id:publish_button" ohos:text="发布新消息"/> </DirectionalLayout> ``` #### 数据存储与同步机制 为了实现高效的数据库访问模式,推荐利用仓颉语言中的`HashMap`特性来进行缓存层的设计。这有助于减少频繁查询带来的性能开销并加快响应速度。当涉及到跨设备间的数据共享,则需考虑通过分布式能力开放平台提供的服务接口完成云端同步逻辑。 #### 性能优化策略 针对页面滚动流畅度方面的要求,借鉴WaterFlow控件所采取的技术手段——即引入懒加载技术能够有效降低资源消耗,提高渲染效率[^2]。具体做法是在列表项视图不可见之前不预先加载其内部元素直至即将进入可视区域才触发对应的初始化流程。 #### 安全防护措施 鉴于此类应用通常会涉及敏感个人信息的操作权限控制显得尤为重要。应遵循最小授权原则仅授予必要的操作许可给特定角色;同时还要注意传输过程的安全加密保障防止数据泄露风险发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值