首页Tabs

一、首页UI设计

          1.Tabs组件可以实现页面内视图内容快速切换,包含TaBar和TabContent两个部分。

2.自定义Tabs的样式,需要用到Builder的函数,用Column布局,一个图片一串文字,需要自己传图片和文字的参数 

二、代码实现

// 定义一个组件,名为Index。
@Component
struct Index {

  // 使用@State装饰器定义一个状态变量currentIndex,初始化为0,用于跟踪当前选中的标签页索引。
  @State currentIndex:number = 0

  // 定义一个TabBarBuilder函数,用于构建标签栏的每个项目。
  // 它接受三个参数:标题资源title,图片资源image,和索引index。
  @Builder TabBarBuilder(title:Resource, image:ResourceStr, index:number) {
    // 使用Column函数创建一个垂直布局的项目。
    Column() {
      // 添加一个图片组件,使用传入的image参数,并设置宽度为22。
      // fillColor方法调用selectColor来选择颜色,根据currentIndex与index是否相等来决定颜色。
      Image(image)
        .width(22)
        .fillColor(this.selectColor(index))
      // 添加一个文本组件,显示传入的title参数,设置字体大小为14。
      // fontColor方法同样调用selectColor来选择颜色。
      Text(title)
        .fontSize(14)
        .fontColor(this.selectColor(index))
    }
  }

  // selectColor是一个辅助函数,根据传入的索引index和当前currentIndex的值,
  // 返回应用在文本和图片上的颜色。如果索引匹配,则返回主题颜色,否则返回灰色。
  selectColor(index: number): Color {
    return this.currentIndex === index ? $r('app.color.primary_color') : $r('app.color.gray')
  }

  // build函数定义了组件的构建逻辑。
  build() {
    // 使用Tabs函数创建一个标签页组件,设置标签栏位置为BarPosition.End。
    Tabs({barPosition: BarPosition.End}) {
      // 为每个标签页内容TabContent创建一个文本组件,显示对应页面的名称。
      TabContent(){
        Text('饮食记录页面')
      }
      // 为第一个标签页设置TabBarBuilder创建的标签栏。
      .tabBar(this.TabBarBuilder($r('app.string.tab_record'), $r('app.media.ic_calendar'), 0))

      // 同上,为第二个和第三个标签页创建内容和标签栏。
      TabContent(){
        Text('发现页面')
      }
      .tabBar(this.TabBarBuilder($r('app.string.tab_discover'), $r('app.media.discover'), 1))

      TabContent(){
        Text('我的主页')
      }
      .tabBar(this.TabBarBuilder($r('app.string.tab_user'), $r('app.media.ic_user_portrait'), 2))
    }

    // 设置组件的宽度和高度为'100%',使其填满父容器。
    .width('100%')
    .height('100%')
    // onChange是一个事件处理函数,当标签页变化时调用,更新currentIndex为新的索引值。
    .onChange(index => this.currentIndex = index)
  }
}

三、运行结果

UniApp 是一套由腾讯云开发的跨平台应用开发框架,它允许开发者使用一套代码同时构建iOS、Android、Web等多端应用程序。Tabs组件是 UniApp 中常用的一种页面结构,用于展示多个并列的页面或功能模块。 在 UniApp 的 Tabs 组件中,通常会有一个顶部的导航栏,包含几个可切换的标签(Tab),每个标签对应一个子页面(Page)。用户可以通过点击这些标签快速导航到不同的内容区域。这种设计常见于许多现代应用程序,如浏览器标签页或新闻阅读器。 以下是 UniApp Tabs 组件的一些关键特点和用法: 1. **初始化设置**:在 Vue 或 WXML 模板中使用 `<van-tabs>` 或 `<tabs>` 组件,并配置标签标题、路径、图标等属性。 ```html <template> <van-tabs v-model="activeIndex"> <van-tab :title="tab1Title" icon="home" :path="'/pages/home'"></van-tab> <van-tab :title="tab2Title" icon="settings" :path="'/pages/settings'"></van-tab> </van-tabs> </template> <script> export default { data() { return { activeIndex: 0, // 默认激活的第一个标签索引 tab1Title: '首页', tab2Title: '设置' }; } }; </script> ``` 2. **动态切换**:`v-model` 双向绑定当前激活的标签页,当用户点击其他标签时,对应的 `activeIndex` 变化,页面也会相应更新。 3. **选项卡行为**:可以配置选项卡的样式,比如是否具有切换动画,或者点击后的过渡效果。 4. **响应式更新**:当数据模型改变时,如果相应的 Tab 内容是动态渲染的,会自动更新显示内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值