首页 > 其他分享 >如何实现抽屉式导航(ArkUI)

如何实现抽屉式导航(ArkUI)

时间:2023-12-12 10:32:50浏览次数:32  
标签:100% 侧边 height width 抽屉式 组件 ArkUI 导航 图标

场景介绍

由于用户所需功能逐渐增多,传统的标签式导航在个别场景已经无法满足用户需求。当导航栏的空间放不下过多页签时,可以采用抽屉式导航,本例将为大家介绍如何通过SideBarContainer组件实现抽屉式导航。

效果呈现

本例最终实现效果如下:

navigationdrawer.gif

运行环境

  • IDE:DevEco Studio 3.1 Beta1
  • SDK:Ohos_sdk_public 3.2.11.9 (API Version 9 Release)

实现思路

  • 通过SideBarContainer组件提供容器,通过子组件定义侧边栏和内容区,第一个子组件表示侧边栏,第二个子组件表示内容区。
  • 调用showSideBar属性来设置不显示侧边栏,controlButton属性来控制完成侧栏的展示/收起。

navigationdrawer1.PNGnavigationdrawer2.png

开发步骤

  1. 创建内容区域文本组件。 首先创建内容区,具体代码块如下:

    ...
    //  内容区
    Column() {
      Text("内容区域")
        .width("100%")
        .height("100%")
        .fontSize(30)
        .textAlign(TextAlign.Center)
    }
    .width("100%")
    .height("100%")
    .backgroundColor("#bbaacc")
    ...
    
  2. 通过SideBarContainer所支持的showSideBar属性来设置不显示侧边栏,controlButton属性来控制完成侧栏的展示/收起。 具体代码块如下:

    ...
    .showSideBar(false) //默认不展示侧边栏,展示icon,用户点击调出
    .controlButton({
      left: 10, // 图标距离左侧宽度
      top: 20, // 图标距离顶部高度
      height: 30, // 图标高度
      width: 30, //  图标宽度
      icons: {
        shown: $r('app.media.back'), // 侧边栏展示时图标
        hidden: $r('app.media.sidebar_shown'), // 侧边栏收起时图标
        switching: $r('app.media.sidebar_shown') // 侧边栏切换过程图标
      }
    })
    ...
    
  3. 创建侧边栏文本组件。 具体代码如下:

    ...
    struct SideBarContainerExample {
    @ State navList: Array<string> = ["我的会员", "我的收藏", "我的相册", "我的文件",]
      build() {
        SideBarContainer(SideBarContainerType.Embed) {
        //  侧边栏内容
          Column() {
            ForEach(this.navList, (item) => {
              Text(item)
                .width("100%")
                .fontSize(20)
                .textAlign(TextAlign.Start)
                .padding({ top: 20 })
            })
          }
        .height("100%")
        .padding({ top: 60, left: 50 })
        .backgroundColor("#aabbcc")
        }
    ...
      }
    }
    

完整代码

示例完整代码如下:

@Entry
@Component
struct SideBarContainerExample {
  @State navList: Array<string> = ["我的会员", "我的收藏", "我的相册", "我的文件",]

  build() {
    // Embed:侧边栏占据内容空间 Overlay:侧边栏悬浮于内容之上
    SideBarContainer(SideBarContainerType.Embed) { 
      // 侧边栏内容
      Column() {
        ForEach(this.navList, (item) => {
          Text(item)
            .width("100%")
            .fontSize(20)
            .textAlign(TextAlign.Start)
            .padding({ top: 20 })
        })
      }
      .height("100%")
      .padding({ top: 60, left: 50 })
      .backgroundColor("#aabbcc")
      // 内容区
      Column() {
        Text("内容区域")
          .width("100%")
          .height("100%")
          .fontSize(30)
          .textAlign(TextAlign.Center)
      }
      .width("100%")
      .height("100%")
      .backgroundColor("#bbaacc")
    }
    // 默认不展示侧边栏,展示icon,用户点击调出
    .showSideBar(false) 
    .controlButton({
      // 图标距离左侧宽度
      left: 10, 
      // 图标距离顶部高度
      top: 20, 
      // 图标高度
      height: 30, 
      // 图标宽度
      width: 30, 
      icons: {
        // 侧边栏展示时图标
        shown: $r('app.media.back'), 
        // 侧边栏收起时图标
        hidden: $r('app.media.sidebar_shown'), 
        // 侧边栏切换过程图标
        switching: $r('app.media.sidebar_shown') 
      }
    })
    // 侧边栏宽度
    .sideBarWidth(200) 
    .width('100%')
    .height('100%')
  }
}

注意:模拟机与真机的预览有区别,在SideBarContainerType.Embed情况下,真机中内容区域是压缩,模拟器中内容区域是缺失。

总结

Tabs组件: 适用于导航栏固定在页面上下左右侧,入口分类数目不多,可以控制在5个以内,且用户需要频繁切换每一个页签的应用,比如微信、QQ等。

Navigation组件: 同样可以实现Tabs组件中导航栏位于底部的场景,根据需要显示隐藏导航栏,提供标题,菜单,返回等选项,使用户是使用时更加灵活。

sideBarContainer组件:主要的功能和内容都在一个页面里面,只是一些低频操作内容需要显示在其他页面里,可以把这些辅助功能放在抽屉栏里。屏幕较小时导航栏不占用空间。比如QQ,开发指导文档等。

本文作者:野生菌君

想了解更多关于开源的内容,请访问:​

​51CTO 开源基础软件社区​

​https://ost.51cto.com/#bkwz​

标签:100%,侧边,height,width,抽屉式,组件,ArkUI,导航,图标
From: https://blog.51cto.com/harmonyos/8782913

相关文章

  • arkui获取屏幕高度临时解决方案
    利用创建canvas对象来获取privatesettings:RenderingContextSettings=newRenderingContextSettings(true)privatecontext:CanvasRenderingContext2D=newCanvasRenderingContext2D(this.settings)将context对象传递给canvas对象,然后在回调函数中获取长宽数据......
  • 界面控件DevExpress WPF导航组件,助力升级应用程序用户体验!(下)
    DevExpressWPF的SideNavigation(侧边导航)、TreeView、导航面板组件能帮助开发者在WPF项目中添加Windows样式的资源管理器栏或OutlookNavBar(导航栏),DevExpressWPFNavBar和Accordion控件包含了许多开发人员友好的功能,专门设计用于帮助用户构建极佳的应用功能。在上文中(点击这里回......
  • 微信小程序自定义顶部导航栏并适配不同机型
    前言在小程序中,顶部导航栏是一个非常重要的组件,它不仅可以方便用户进行页面切换,还可以提高用户体验。默认情况下,小程序的顶部导航栏是由系统自动生成的,我们只能修改一些基本的样式,如背景色、文字颜色等。但是,如果想要实现更加复杂的样式,如自定义图标、自定义背景等,而且在不同的手......
  • 金牌导航-网络流初探
    网络流初探例题B题解从源点向每个猪圈连边,每个人向汇点连边。然后对于每个人所能打开的猪圈,如果在此之前没有被其他人连过,就让这个猪圈连向这个人,否则让这个人连向之前那个人。例题B代码#include<bits/stdc++.h>usingnamespacestd;inlineintread(){intx=0,f=......
  • 如何实现波纹进度条(ArkUI)
    场景说明应用开发过程中经常用到波纹进度条,常见的如充电进度、下载进度、上传进度等,本例即为大家介绍如何实现上述场景。效果呈现本示例最终效果如下:运行环境本例基于以下环境开发,开发者也可以基于其他适配的版本进行开发:IDE:DevEcoStudio3.1Beta2SDK:Ohos_sdk_publi......
  • 关于键盘导航顺序和 tabindex 属性的关联关系
    "tabindex"属性是HTML元素中的一个属性,用于定义元素在通过键盘导航时的顺序。该属性接受一个整数值,通常为正整数,用于指定元素的tab键顺序。但是,当"tabindex"属性的值为-1时,它有特殊的含义。当"tabindex"的值为-1时,它表示该元素虽然可以通过JavaScript聚焦,但在通过按下Tab键进行导......
  • 金牌导航-二分图匹配
    金牌导航-二分图匹配例题A题解将行和列相匹配,跑最小割即可。例题A代码#include<bits/stdc++.h>usingnamespacestd;inlineintread(){intx=0,f=1;charch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();......
  • 小程序开发实战案例之三 | 小程序底部导航栏如何设置
    小程序中最常见的功能就是底部导航栏了,今天就来看一下怎么设置一个好看的导航栏~这里我们使用的是支付宝官方小程序IDE做示范。 官方提供的底部导航栏第一步:页面创建一般的小程序会有四个tab,我们这次也是配置四个tab的导航栏。首先,我们先创建四个页面: tab最多可......
  • Prism导航
    注册导航页面注册区域使用p:RegionManager.RegionName注册页面区域<Windowx:Class="Zhaoxi.PrismRegion.Navigation.Views.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft......
  • uniapp---wap2app去掉系统自带的导航栏
    在用uniapp进行将wap站转化为app的时候,默认打包后的文件,带有系统的导航栏,下面是去除的办法:第一步:找到sitemap.json 设置titleNView为false: 第二步:在pages加入{"webviewId":"common","matchUrls":[{"hostname":"R:.*","pa......