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

鸿蒙自定义侧滑菜单布局(DrawerLayout)

前言

为了实现安卓中的侧滑菜单布局效果,通过查找鸿蒙的布局控件,发现SideBarContainer控件有点像,但是使用中发现并不是很符合我们的UI交互效果,因此我在鸿蒙中通过自定义布局的方式实现,本文主要介绍该自定义控件如何使用、SideBarContainer原生控件如何使用,后面会介绍如何通过自定义实现侧滑菜单布局。

DeVEcoStudio版本如下:

"minAPIVersion": 9,
"targetAPIVersion": 9,

控件效果

 

如何使用

1、DrawerLayout.har包的引用

DrawerLayout.har下载地址:https://download.csdn.net/download/Abner_Crazy/88864397

entry下的main目录下新建libs目录将下载完成的DrawerLayout.har拷贝到该目录,然后在oh-package.json5文件中添加对DrawerLayout.har的引用

oh-package.json5文件

{"license": "","devDependencies": {},"author": "","name": "entry","description": "Please describe the basic information.","main": "","version": "1.0.0","dependencies": {"@app/DrawerLibrary": "file:./src/main/libs/DrawerLibrary.har"}
}

2、调用DrawerLayout布局

import { DrawerController, DrawerLayout } from '@app/DrawerLibrary'@Entry
@Component
struct Index {@State controller: DrawerController = new DrawerController()@State isShowSideBar: boolean = false@BuilderleftView() {Text('我是侧边栏').fontSize(30)}@BuilderrightView() {Column() {RelativeContainer() {Image(this.isShowSideBar ? $r('app.media.drawer_select') : $r('app.media.drawer_normal')).width(32).height(32).id('imageDrawer').margin({ left: 20 }).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },left: { anchor: '__container__', align: HorizontalAlign.Start }}).onClick(() => {if (this.isShowSideBar) {this.controller.hideSideBar()} else {this.controller.showSideBar()}})Text('首页').fontSize(24).fontColor(Color.White).fontWeight(FontWeight.Bold).id("textTitle").alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }})}.backgroundColor('#1296db').width('100%').height(56)}.width('100%').height('100%')}build() {Stack() {DrawerLayout({isShowSideBar: this.isShowSideBar,controller: this.controller,leftView: () => this.leftView(),rightView: () => this.rightView()})}.width('100%').height('100%')}
}

DrawerLayout参数解释:

属性是否必须描述
isShowSideBar侧边栏是否显示
controller

布局控制器,有两个方法:

showSideBar():显示侧边栏

hideSideBar():隐藏侧边栏

leftView左侧侧边栏的布局
rightView右侧内容的布局
sideBarWidth左侧侧边栏的宽度

鸿蒙原生侧边栏布局使用介绍

SideBarContainer控件官方介绍:sidebarcontainer介绍

1、SideBarContainer调用


@Entry
@Component
struct Index {@State isShowSideBar: boolean = false@BuilderleftView() {Text('我是侧边栏').fontSize(30)}@BuilderrightView() {Column() {RelativeContainer() {Image(this.isShowSideBar ? $r('app.media.drawer_select') : $r('app.media.drawer_normal')).width(32).height(32).id('imageDrawer').margin({ left: 20 }).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },left: { anchor: '__container__', align: HorizontalAlign.Start }}).onClick(() => {this.isShowSideBar = !this.isShowSideBar})Text('首页').fontSize(24).fontColor(Color.White).fontWeight(FontWeight.Bold).id("textTitle").alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }})}.backgroundColor('#1296db').width('100%').height(56)}.width('100%').height('100%')}build() {Stack() {SideBarContainer(SideBarContainerType.Embed) {this.leftView()this.rightView()}.showSideBar(this.isShowSideBar).showControlButton(false) //是否显示控制按钮.sideBarWidth(300).maxSideBarWidth(300).onChange((value: boolean) => {console.info('status:' + value)})}.width('100%').height('100%')}
}

2、控件效果:

 

相关文章:

  • 《VitePress 简易速速上手小册》第8章 安全性与部署(2024 最新版)
  • ChatGPT丨成像光谱遥感技术中的AI革命:ChatGPT应用指南
  • Excel练习:双层图表
  • Linux | Ubuntu通过USB访问Redmi K40存储出现xxx was not providedby any .service files错误
  • 机器学习面试:逻辑回归与朴素贝叶斯区别
  • Oracle普通用户启停JOB报错ORA 27486权限不足
  • 【大数据】Flink 之部署篇
  • JVM知识——安全点
  • 【鸿蒙 HarmonyOS 4.0】网络请求
  • ElasticSearch聚合操作
  • SHERlocked93 的 2017 年终总结
  • Linux常见的指令
  • 用HTML5 Canvas创造视觉盛宴——动态彩色线条效果
  • OpenAI超级视频模型Sora技术报告解读,虚拟世界涌现了
  • QT中调用python
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Codepen 每日精选(2018-3-25)
  • Cumulo 的 ClojureScript 模块已经成型
  • ECMAScript6(0):ES6简明参考手册
  • Effective Java 笔记(一)
  • happypack两次报错的问题
  • HTML5新特性总结
  • JAVA 学习IO流
  • QQ浏览器x5内核的兼容性问题
  • vue脚手架vue-cli
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于HAProxy的高性能缓存服务器nuster
  • 数据科学 第 3 章 11 字符串处理
  • 大数据全解:定义、价值及挑战
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​Python 3 新特性:类型注解
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #《AI中文版》V3 第 1 章 概述
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (09)Hive——CTE 公共表达式
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)jdk与jre的区别
  • (转)memcache、redis缓存
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .net实现客户区延伸至至非客户区
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • [ 蓝桥杯Web真题 ]-布局切换
  • [AHOI2009]中国象棋 DP,递推,组合数