鸿蒙应用ArtTS开发---底部切换(tab)和角标组件(Badge)

项目场景:

        在线上大部分app很常见的功能,底部导航切换附带消息角标提示。


Tabs 组件:

        通过页签进行内容视图切换的容器组件,每个页签对应一个内容视图。

        仅可包含子组件TabContent


Badge 组件:

        可以附加在单个组件上用于信息标记的容器组件。

        支持单个子组件。

 注意:Badge 组件使用的时候要设置具体宽高,否则会铺满父组件。

组件的具体属性介绍可以去官网指南或者查看其他文章了解一下


整体思路:

        通过Tabs组件中的子组件TabContent引用底部导航对应的页面组件,通过if判断下标把需要角标的导航部分用Badge组件进行替换。

// tabBar(this.TabBuilder("底部导航文本", 数字下标, "点击状态图片路径", "被点击状态图片路径")
tabBar(this.TabBuilder($r('app.string.tabBar_There'), 2, $r("app.media.mineCopy"), $r("app.media.mine"))
import { Index } from "./index/Index"
import { message } from "./message/message"
import { mine } from "./mine/mine"

@Entry
@Component
struct TabsPage {
  @State messageNum: string = '1'; // 消息数量
  @State currentIndex: number = 0; // 下标
  private tabsController: TabsController = new TabsController()
  // 底部导航切换函数
  @Builder TabBuilder(title: string, targetIndex: number, normalImg: Resource, selectedImg: Resource) {
    Column() {
      if (targetIndex === 1) { // 角标导航部分单独做处理
        Badge({
          value: this.messageNum,
          style: { fontSize: 12, badgeSize: 14, badgeColor: '#FA2A2D' }
        }) {
          Column() {
            Image(this.currentIndex === targetIndex ? normalImg : selectedImg)
              .width(28)
              .height(28)

            Text($r('app.string.tabBar_two'))
              .margin({ top: 4 })
              .fontSize(14)
              .fontColor(this.currentIndex === targetIndex ? '#103897' : '#999999')
          }
        }.width('30%').height('80%')
      } else {
        Image(this.currentIndex === targetIndex ? normalImg : selectedImg)
          .width(28)
          .height(28)
        Text(title)
          .fontSize(14)
          .margin({ top: 4 })
          .fontColor(this.currentIndex === targetIndex ? '#103897' : '#999999')
      }
    }
    .width('100%')
    .height(60)
    .justifyContent(FlexAlign.Center)
    .backgroundColor("rgb(247, 247, 250)")
    .onClick(() => {
      this.currentIndex = targetIndex
      this.tabsController.changeIndex(this.currentIndex)
    })
  }
  // tabs 底部导航切换组件
  build() {
    Column() {
      Tabs({ barPosition: BarPosition.End, controller: this.tabsController, index: 0 }) {
        TabContent() {
          Index()
          // @ts-ignore
        }.tabBar(this.TabBuilder($r('app.string.tabBar_one'), 0, $r("app.media.indexCopy"), $r("app.media.index")))

        TabContent() {
          message()
          // @ts-ignore
        }.tabBar(this.TabBuilder($r('app.string.tabBar_two'), 1, $r("app.media.myNews"), $r("app.media.myNewsCopy")))

        TabContent() {
          mine()
          // @ts-ignore
        }.tabBar(this.TabBuilder($r('app.string.tabBar_There'), 2, $r("app.media.mineCopy"), $r("app.media.mine")))
      }
      .scrollable(false) //去掉左右滑动的效果
      .animationDuration(0) //去掉左右滑动的动画
    }
    .width('100%')
    .height('100%')
    .backgroundColor("#fff")
  }
}

后续的鸿蒙开发中,有遇到有意思的部分也会继续分享给大家!

如果有不理解的地方,可以分享出来一起研究哦~

<think>好的,我现在需要帮助用户找到ArtTS中清除缓存的方法。首先,我需要回忆一下ArtTS相关的文档内容。用户提供的引用中,提到了关于系统能力中的通知模块@State的使用,但没有直接提到缓存管理。这可能意味着我需要从ArtTS的基础类库或系统能力中寻找相关功能。 ArtTS作为鸿蒙的应用开发框架,通常缓存管理可能属于存储或文件系统的能力。我需要检查是否有类似Storage或Cache管理的模块。例如,鸿蒙的API中可能有提供清除应用缓存的接口,比如通过StorageHelper或类似工具类。 另外,用户提供的引用[2]提到了@State的使用,这可能与组件状态管理相关,但清除缓存更可能涉及系统级的API,而不是组件状态。可能需要查阅ArtTS的文档,查找是否有清除应用缓存的系统接口,例如使用Context对象的方法,或者调用系统服务来清理缓存目录下的文件。 假设ArtTS遵循类似其他移动开发框架的结构,清除缓存可能需要访问应用的文件存储路径,并删除缓存目录中的内容。例如,使用Context.getCacheDir()获取缓存目录,然后递归删除其中的文件。此外,可能还需要调用系统API来通知系统缓存已被清理,确保存储统计信息更新。 需要验证这些步骤是否符合ArtTS的具体实现。如果官方文档中没有明确说明,可能需要参考鸿蒙开发文档,查找与ArtTS兼容的缓存管理方法。此外,还要注意权限问题,确保应用具有删除缓存文件的权限,这通常属于应用沙箱内的操作,不需要额外权限。 总结可能的步骤:获取应用的Context对象,通过Context的方法访问缓存目录,删除目录中的文件。或者使用封装好的Storage模块中的方法直接清除缓存。需要具体示例代码来演示这一过程,并确保符合ArtTS的语法规范。</think>在ArtTS中清除缓存通常涉及文件系统或存储模块的操作。根据现有参考资料,以下是实现方法: ### 清除缓存方法步骤 1. **获取应用上下文**: ```typescript let context = getContext(this) as common.UIAbilityContext ``` 2. **访问缓存目录**: ```typescript let cacheDir = context.cacheDir ``` 3. **删除缓存文件**: 使用文件管理模块递归删除目录: ```typescript import fileio from '@ohos.fileio' function clearCache(dirPath: string) { try { let dir = fileio.opendirSync(dirPath) let entry = dir.readSync() while (entry) { let fullPath = dirPath + '/' + entry.name if (entry.isFile()) { fileio.unlinkSync(fullPath) } else { clearCache(fullPath) // 递归删除子目录 } entry = dir.readSync() } fileio.rmdirSync(dirPath) // 删除空目录 } catch (err) { console.error('清除缓存失败:', err) } } ``` 4. **调用方法**: ```typescript clearCache(cacheDir) ``` ### 注意事项 - 需要导入`@ohos.fileio`模块 - 建议在异步任务中执行文件操作 - 删除前应检查文件访问权限 - 可配合进度通知功能实现可视化反馈[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亭瞳^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值