使用Tabs组件提升页面内容的聚焦与分类效率

news2024/9/20 14:36:25

当页面信息量较大时,为了提高用户的浏览效率,我们需要对页面内容进行有效的分类和展示。HarmonyOS提供的Tabs组件是一个理想的解决方案,可以在一个页面内快速切换视图内容,提升用户查找信息的效率,同时减少用户在单次操作中获取的信息量。

Tabs组件的基本结构与布局

Tabs组件的页面结构主要包括两个部分:TabContentTabBar。TabContent是实际显示的内容页,TabBar则是导航页签栏。Tabs组件的布局支持三种导航方式:底部导航、顶部导航和侧边导航,每种导航方式适用于不同的使用场景。

Tabs() {
    TabContent() {
        Text('首页内容').fontSize(30)
    }
    .tabBar('首页')

    TabContent() {
        Text('推荐内容').fontSize(30)
    }
    .tabBar('推荐')

    TabContent() {
        Text('发现内容').fontSize(30)
    }
    .tabBar('发现')

    TabContent() {
        Text('我的内容').fontSize(30)
    }
    .tabBar("我的")
}
底部导航:最常见的应用主导航

底部导航是应用中最常见的一种导航方式,通常位于应用的一级页面。用户打开应用时,可以快速分辨出应用的主要功能模块,方便用户单手操作。

Tabs({ barPosition: BarPosition.End }) {
    // TabContent内容示例:首页、推荐、发现、我的
    ...
}
顶部导航:适用于内容分类较多的场景

顶部导航更适合用于需要频繁切换且内容分类较多的应用场景,例如资讯类应用。顶部导航可以将内容按类型进一步细分,让用户快速找到自己感兴趣的内容。

Tabs({ barPosition: BarPosition.Start }) {
    // TabContent内容示例:关注、视频、游戏、数码、科技
    ...
}
侧边导航:横屏应用的首选

侧边导航通常用于横屏界面,由于用户的视觉习惯是从左到右,侧边导航栏默认为左侧。这种布局更多出现在横屏游戏或多功能操作界面中。

Tabs({ barPosition: BarPosition.Start, vertical: true }) {
    // TabContent内容示例:首页、发现、推荐、我的
    ...
}
限制导航栏的滑动切换

在一些多级分类的页面中,导航栏的滑动切换可能会引起用户的困惑。因此,我们可以通过设置scrollable属性来限制导航栏的滑动切换。

Tabs({ barPosition: BarPosition.End, scrollable: false }) {
    // 底部导航示例,滑动切换已禁用
    ...
}
固定与滚动导航栏

固定导航栏适用于内容分类较少且不具有拓展性的场景,例如底部导航。滚动导航栏则适用于内容分类较多的场景,例如顶部导航栏。

// 固定导航栏示例
Tabs({ barPosition: BarPosition.End, barMode: BarMode.Fixed }) {
    // 固定底部导航栏示例
    ...
}

// 滚动导航栏示例
Tabs({ barPosition: BarPosition.Start, barMode: BarMode.Scrollable }) {
    // 滚动顶部导航栏示例
    ...
}
自定义导航栏:提高用户体验

在应用主页面,通常我们会希望结合文字与图标来表示导航页签的内容。HarmonyOS支持通过自定义函数组件来实现这一需求,增强用户体验。

@Builder tabBuilder(title: string, targetIndex: number, selectedImg: Resource, normalImg: Resource) {
    Column() {
        Image(this.currentIndex === targetIndex ? selectedImg : normalImg)
            .size({ width: 25, height: 25 })
        Text(title)
            .fontColor(this.currentIndex === targetIndex ? '#1698CE' : '#6B6B6B')
    }
    .width('100%')
    .height(50)
    .justifyContent(FlexAlign.Center)
}

TabContent() {
    Column(){
        Text('我的内容')  
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#007DFF')
}
.tabBar(this.tabBuilder('我的', 0, $r('app.media.mine_selected'), $r('app.media.mine_normal')))
自定义页签切换逻辑

在使用自定义导航栏后,默认的Tabs逻辑不会处理页签的切换逻辑。我们可以通过onChange事件方法监听索引变化,自行实现页签的切换逻辑。

@Entry
@Component
struct TabsExample1 {
    @State currentIndex: number = 2

    @Builder tabBuilder(title: string, targetIndex: number) {
        Column() {
            Text(title)
                .fontColor(this.currentIndex === targetIndex ? '#1698CE' : '#6B6B6B')
        }
    }

    build() {
        Column() {
            Tabs({ barPosition: BarPosition.End }) {
                TabContent() {
                    ...
                }.tabBar(this.tabBuilder('首页', 0))

                TabContent() {
                    ...
                }.tabBar(this.tabBuilder('发现', 1))

                TabContent() {
                    ...
                }.tabBar(this.tabBuilder('推荐', 2))

                TabContent() {
                    ...
                }.tabBar(this.tabBuilder('我的', 3))
            }
            .animationDuration(0)
            .backgroundColor('#F1F3F5')
            .onChange((index: number) => {
                this.currentIndex = index
            })
        }.width('100%')
    }
}

在这里插入图片描述

通过这种方式,开发者可以精确控制用户交互时的内容切换体验,确保应用在不同场景下的使用效果。

总结

Tabs组件在HarmonyOS中提供了灵活且强大的页面内容切换功能。通过合理配置不同的布局和自定义功能,可以极大地提升应用的用户体验,特别是在信息量较大、分类较多的场景中。希望这篇文章能为开发者提供一些新颖的思路,在实际开发中充分发挥Tabs组件的优势。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2072851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS定位与布局

一、display属性(元素如何显示) 网页上的每个元素都是一个​盒模型​。​display​属性决定了盒模型的​行为方式​,设置元素如何被显示。 display常用的属性共有​4个​值: ​display: none;​ -- 让标签消失(隐藏元素并脱离文档…

Mac M1Pro 安装Java性能监控工具VisualVM 2.1.9

本地已经安装了java8,在终端输入jvisualvm提示没有安装 zhiniansara ~ % jvisualvm The operation couldn’t be completed. Unable to locate a Java Runtime that supports jvisualvm. Please visit http://www.java.com for information on installing Java.官网…

Kafka事件(消息、数据)的存储

1、查看有关kafka日志配置文件的信息 2、查看kafka全部主题的日志文件 3、查看每个主题的日志文件 4、__consumer_offsets-xx文件夹的作用 package com.power;public class Test {public static void main(String[] args) {int partition Math.abs("myTopic".hashCo…

企业微信API对接文档【可向微信用户发消息】

目录 企业微信API对接文档 1.背景 2.获取微信第三方token 3.安装docker环境 4.打包与启动 4.1打包镜像 4.2启动容器(启动应用) 5.企业微信二维码验证 5.1 获取初始二维码 5.2 第1次二维码验证 5.3 第2次二维码验证 6. 企业微信三…

上博士为了毕业写学术论文头都大了,但更难受的是英语不咋地,投稿后经常会因为语言问题而惨遭拒稿,每每想起就令人心情郁郁,天台可期。

上博士为了毕业写学术论文头都大了,但更难受的是英语不咋地,投稿后经常会因为语言问题而惨遭拒稿,每每想起就令人心情郁郁,天台可期。有些审稿人也会直接告知需要专业的修改,那咋整呢,让润色呗,…

虚拟机virtualbox linux ubuntu使用usb串口

1.卸载brltty sudo apt remove brltty brltty是一个没啥用但是会抢占ch431的软件,所以卸载它 2.连接上串口,点击连接对应的usb串口 3.查看是否连接上 sudo dmesg -T | grep tty 查看tty组的最近日志,如果连接成功会显示连接的时间和串口…

基于数据挖掘的心力衰竭疾病风险评估系统

B站视频及代码下载:基于数据挖掘的心力衰竭疾病风险评估系统_哔哩哔哩_bilibili 1. 项目简介 心力衰竭是一种常见的心脏疾病,它严重影响患者的生活质量和预期寿命。早期识别和干预对于改善患者的预后至关重要。近年来,随着大数据技术和机器学…

eleme

设置主从从mysql57服务器 --配置主数据库 # systemctl stop firewalld # setenforce 0 # systemctl disable firewalld # ls anaconda-ks.cfg mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz# tar -xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz # cp -r mysql-5.7.44-linux-…

【题解】【循环】——[NOIP2010 普及组] 数字统计

【题解】【循环】——[NOIP2010 普及组] 数字统计 [NOIP2010 普及组] 数字统计题目描述输入格式输出格式输入输出样例输入 #1输出 #1输入 #2输出 #2 提示 1.题意解析2.AC代码 [NOIP2010 普及组] 数字统计 戳我查看题目(洛谷) 题目描述 请统计某个给定…

Spring cloud 网关信息

网关简绍 就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 引入网关依赖 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependenc…

html+css 实现爱心跳动

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 实现爱心跳动&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f49…

速通教程:如何使用Coze+剪映,捏一个爆款悟空视频

程哥最近做了一个和黑神话悟空有关的视频&#xff0c;没想到就火了&#xff0c;视频主打一个玉石风格&#xff0c;就是下面这个视频。 视频请移步飞书观看&#xff1a;黑神话悟空玉石版 制作过程不算很复杂&#xff0c;全程只需要用到Coze智能体和剪映这两个工具。 智能体用…

做个实验

做个实验 #include <bits/stdc.h> using namespace std; #define int long long #define ll __int128_t #define ar array<int, 2> #define arr array<int, 3> int n, m, k, inf 1LL << 61, mod 998244353;// 1e97; const int N 5e5 50;void sol…

存储架构模式之数据库存储架构

数据库读写分离 读写分离解决了读的问题。读被分离出去了&#xff0c;写性能的提升还是会有的。 数据库慢不需要直接上读写分离&#xff0c;先尝试优化索引&#xff0c;加入缓存等操作。 数据库读写分离复杂度分析 任务分解&#xff1a;读请求打到从机&#xff0c;写请求打到…

kafka发送消息-生产者发送消息的分区策略(消息发送到哪个分区中?是什么策略)

生产者发送消息的分区策略&#xff08;消息发送到哪个分区中&#xff1f;是什么策略&#xff09; 1、默认策略&#xff0c;程序自动计算并指定分区1.1、指定key&#xff0c;不指定分区1.2、不指定key&#xff0c;不指定分区 2、轮询分配策略RoundRobinPartitioner2.1、创建配置…

【前端基础篇】CSS基础速通万字介绍(上篇)

文章目录 前言CSS介绍什么是CSS基本语法规范 引入方式内部样式表行内样式表外部样式总结 代码风格样式格式样式大小写空格规范 选择器选择器的功能选择器的种类基础选择器标签选择器类选择器id选择器通配符选择器基础选择器总结 复合选择器后代选择器子代选择器并集选择器 伪类…

杀软对抗 ----> 你真的Bypass火绒了吗?

目录 1.白加黑&#xff1f;syscall&#xff1f; ......绕过火绒&#xff1f;&#xff1f;&#xff1f; 2.内存对抗 ​3.CS已死 &#xff1f;&#xff1f;&#xff1f; 是真的 &#xff01; 玩免杀的都知道&#xff0c;我们说到国产&#xff0c;基本上都是360&#xff0c;对于…

AutoCAD 2010 x64图文安装教程及下载.

AutoCAD 2010 是 Autodesk 于2009年发布的一个版本&#xff0c;是 AutoCAD 系列中的一个重要里程碑。以下是 AutoCAD 2010 x64 的一些关键特性和改进&#xff1a; 参数化绘图&#xff1a;增加了几何约束和尺寸约束功能&#xff0c;使用户能够创建更精确、可调整的设计模型。动…

树章节习题

今天也是小小的把树的章节的内容大体过了一遍&#xff0c;总共有树上dp&#xff0c;LCA&#xff08;最近公共祖先&#xff09;&#xff0c;树的直径&#xff0c;以及树上差分 P1395 会议 很经典的树上dp里面的换根dp问题&#xff0c;现在这里说几个数组 sz数组&#xff0c;用…

多模态协同学习框架 DMCL

https://arxiv.org/pdf/2408.05914 一.discriminative and robust model 早期传统的reid的工作方式&#xff0c;因无法在大规模数据集上产生有竞争力的结果&#xff0c;所以本文中为相关工作&#xff0c;并未成为本文方法。 二.Dynamic Multimodal Feature Fusion Strategy 提…