马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
媒介
为了实现安卓中的侧滑菜单布局结果,通过查找鸿蒙的布局控件,发现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
- @Builder
- leftView() {
- Text('我是侧边栏').fontSize(30)
- }
- @Builder
- rightView() {
- 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
- @Builder
- leftView() {
- Text('我是侧边栏').fontSize(30)
- }
- @Builder
- rightView() {
- 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、控件结果:
 
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |