当前位置: 首页 > news >正文

ArkTS 如何适配手机和平板,展示不同的 Tabs 页签

ArkTS(Ark TypeScript)作为HarmonyOS应用开发的主要语言,提供了丰富的组件和接口来适配不同设备,包括手机和平板。在展示不同的Tabs页签以适应手机和平板时,ArkTS主要依赖于布局和组件的灵活性,以及响应式设计的概念。以下是一些关键的步骤和考虑因素:

1. 使用断点系统(Breakpoint System)

HarmonyOS提供了断点系统,允许开发者根据设备的屏幕尺寸来应用不同的样式和布局。通过断点系统,可以识别设备类型(如手机、平板)并据此调整Tabs页签的布局。

  • 设置断点:在ArkTS中,可以使用BreakpointSystem类来注册和监听断点变化。根据设备的屏幕尺寸,可以设置不同的断点,如小屏(手机)、大屏(平板)等。
  • 响应断点:根据当前断点,调整Tabs页签的布局属性,如位置(顶部、底部、侧边)、宽度、高度等。

2. 自定义Tabs组件

ArkTS允许开发者自定义Tabs组件,以适应不同的设备类型。

  • 设置Tabs属性:使用Tabs组件时,可以通过barPosition属性设置页签的位置(顶部、底部),通过vertical属性设置页签的排列方向(横向、纵向)。
  • 响应式设计:在Tabs组件的build方法中,可以根据断点系统的返回值动态设置Tabs的属性,以实现响应式设计。

3. 编写条件渲染逻辑

根据设备的屏幕尺寸或断点状态,编写条件渲染逻辑,以决定展示哪种Tabs布局。

  • 使用if/else语句:在组件的build方法中,使用if/else语句或类似的逻辑判断语句,根据断点系统的返回值来渲染不同的Tabs布局。
  • 动态样式:使用ArkTS的样式绑定功能,根据设备的屏幕尺寸动态调整Tabs组件的样式属性。

4. 示例代码

以下是一个简化的示例代码,展示了如何使用ArkTS的断点系统和Tabs组件来适配手机和平板。

import { BreakpointSystem, BreakpointConstants } from '@ohos/common';@Entry
@Component
struct TabsDemo {@State currentPageIndex: number = 0;private breakpointSystem: BreakpointSystem = new BreakpointSystem();aboutToAppear() {this.breakpointSystem.register();}aboutToDisappear() {this.breakpointSystem.unregister();}build() {let barPosition = this.breakpointSystem.getCurrentBreakpoint() === BreakpointConstants.BREAKPOINT_LG ?BarPosition.End : BarPosition.Start;Column() {Tabs({ barPosition: barPosition, index: this.currentPageIndex, onChange: (index: number) => {this.currentPageIndex = index;}}) {// 假设有多个TabContent组件TabContent() { /* 第一个页面的内容 */ }.tabBar('第一个标签')TabContent() { /* 第二个页面的内容 */ }.tabBar('第二个标签')// ... 其他TabContent组件}// ... 其他布局元素}}
}

注意:上述代码是一个简化的示例,用于说明如何根据断点系统的返回值来设置Tabs组件的barPosition属性。在实际应用中,可能需要根据具体需求进行更多的自定义和逻辑处理。

5. 断点配置@ohos/common代码

import { mediaquery } from '@kit.ArkUI';
import { BreakpointConstants } from '../constants/BreakpointConstants';declare interface BreakPointTypeOption<T> {sm: Tmd: Tlg: T
}export class BreakPointType<T> {options: BreakPointTypeOption<T>constructor(option: BreakPointTypeOption<T>) {this.options = option;}getValue(currentBreakPoint: string): T {if (this.options.sm !== undefined && currentBreakPoint === 'sm') {return this.options.sm as T;}if (this.options.md && currentBreakPoint === 'md') {return this.options.md as T;} else {return this.options.lg as T;}}
}export class BreakpointSystem {private currentBreakpoint: string = '';private smListener?: mediaquery.MediaQueryListener;private mdListener?: mediaquery.MediaQueryListener;private lgListener?: mediaquery.MediaQueryListener;private updateCurrentBreakpoint(breakpoint: string) {if (this.currentBreakpoint !== breakpoint) {this.currentBreakpoint = breakpoint;AppStorage.set<string>(BreakpointConstants.CURRENT_BREAKPOINT, this.currentBreakpoint);}}private isBreakpointSM = (mediaQueryResult: mediaquery.MediaQueryResult) => {if (mediaQueryResult.matches) {this.updateCurrentBreakpoint(BreakpointConstants.BREAKPOINT_SM);}}private isBreakpointMD = (mediaQueryResult: mediaquery.MediaQueryResult) => {if (mediaQueryResult.matches) {this.updateCurrentBreakpoint(BreakpointConstants.BREAKPOINT_MD);}}private isBreakpointLG = (mediaQueryResult: mediaquery.MediaQueryResult) => {if (mediaQueryResult.matches) {this.updateCurrentBreakpoint(BreakpointConstants.BREAKPOINT_LG);}}public register() {this.smListener = mediaquery.matchMediaSync(BreakpointConstants.RANGE_SM);this.smListener.on('change', this.isBreakpointSM);this.mdListener = mediaquery.matchMediaSync(BreakpointConstants.RANGE_MD);this.mdListener.on('change', this.isBreakpointMD);this.lgListener = mediaquery.matchMediaSync(BreakpointConstants.RANGE_LG);this.lgListener.on('change', this.isBreakpointLG);}public unregister() {this.smListener?.off('change', this.isBreakpointSM);this.mdListener?.off('change', this.isBreakpointMD);this.lgListener?.off('change', this.isBreakpointLG);}
}

6. 测试和优化

  • 在不同设备上测试:在开发过程中,应在多种设备和屏幕尺寸上进行测试,以确保Tabs页签在不同设备上的展示效果符合预期。
  • 优化性能:注意优化Tabs组件的性能,特别是在包含大量页签或复杂内容时。可以通过懒加载、分页加载等方式来减少初始加载时间和内存消耗。

综上所述,ArkTS通过断点系统、自定义组件和响应式设计等方法来适配手机和平板设备,展示不同的Tabs页签。开发者需要根据具体需求进行灵活配置和优化。

相关文章:

ArkTS 如何适配手机和平板,展示不同的 Tabs 页签

ArkTS&#xff08;Ark TypeScript&#xff09;作为HarmonyOS应用开发的主要语言&#xff0c;提供了丰富的组件和接口来适配不同设备&#xff0c;包括手机和平板。在展示不同的Tabs页签以适应手机和平板时&#xff0c;ArkTS主要依赖于布局和组件的灵活性&#xff0c;以及响应式设…...

Docker下载途径

Docker不是Linux自带的&#xff0c;需要我们自己安装 官网&#xff1a;https://www.docker.com/ 安装步骤&#xff1a;https://docs.docker.com/engine/install/centos/ Docker Hub官网(镜像仓库)&#xff1a;https://hub.docker.com/ 在线安装docker 先卸载旧的docker s…...

Windows: 如何实现CLIPTokenizer.from_pretrained`本地加载`stable-diffusion-2-1-base`

参考&#xff1a;https://blog.csdn.net/qq_38423499/article/details/137158458 https://github.com/VinAIResearch/Anti-DreamBooth?tabreadme-ov-file 联网下载没有问题&#xff1a; import osos.environ["HF_ENDPOINT"] "https://hf-mirror.com" i…...

MySQL 9从入门到性能优化-慢查询日志

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

ARM学习(33)英飞凌(infineon)PSOC 6 板子学习

笔者来聊一下psoc62 系列板子的知识 1、PSOC62板子介绍 Psoc6-evaluationkit-062S2 与RT-Thread联合推出的一款32位的双core的板子&#xff0c;基于CortexM4以及CortexM0。 管脚兼容Arduio。板载DAP-Link&#xff0c;可以支持调试以及串口&#xff0c;无需外接2MB的Flash以及…...

华为原生鸿蒙操作系统的发布有何重大意义和影响:

#1024程序员节 | 征文# 一、华为原生鸿蒙操作系统的发布对中国的意义可以从多个层面进行分析&#xff1a; 1. 技术自主创新 鸿蒙操作系统的推出标志着中国在操作系统领域的自主创新能力的提升。过去&#xff0c;中国在高端操作系统方面依赖于外国技术&#xff0c;鸿蒙的发布…...

API 接口:连接生活与商业的数字桥梁

在当今数字化高速发展的时代&#xff0c;API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;接口正以前所未有的深度和广度影响着我们的日常生活与商业决策。 一、API 接口在日常生活中的应用 智能出行 地图导航应用通过接入各种交通数…...

IEC101 JAVA开发记录

目录 JAVA Demo 仿真工具 平衡式与非平衡式 帧格式 固定帧格式 可变帧格式 单字节 控制域 主站到子站 子站至主站 位组成 链路地址 应用服务数据单元(ASDU) 类型标识TI 可变结构限定词(VSQ) 传送原因(COT) 信息体元素 带品质描述词的单点信息(SIQ) 带品…...

降压恒压150V供电 负载固定5V 持续0.6A电动车仪表供电芯片SL3150H

一、供电能力 高电压输入&#xff1a;SL3150H具备150V的供电能力&#xff0c;这意味着它可以在电动车的复杂电气环境中稳定工作&#xff0c;无论是面对高电压的输入还是电压波动较大的情况&#xff0c;都能保持稳定的输出。固定输出电压与电流&#xff1a;在输出方面&#xff…...

QT 从ttf文件中读取图标

最近在做项目时&#xff0c;遇到需要显示一些特殊字符的需求&#xff0c;这些特殊字符无法从键盘敲出来&#xff0c;于是乎&#xff0c;发现可以从字体库文件ttf中读取显示。 参考博客&#xff1a;QT 图标字体类IconHelper封装支持Font Awesome 5-CSDN博客 该博客封装的很不错…...

JS动态调用变量

当存在多个变量checkbox1、checkbox2、checkbox3、checkbox4的变量时 -常规调用:if(条件A){this.$refs.checkbox1.check true }if(条件B){this.$refs.checkbox2.check true } 或者使用switch case-动态调用: var result 2 // 在dom渲染完成再给checkbox赋值this.$nextTick…...

django restful API

文章目录 项目地址一、django环境安装以及初识restful1.1 安装python 3.10的虚拟环境1.2 创建django工程文件1.3 创建一个book app1.4 序列化(Django JsonResponse)1.4.1创建一个Models1.4.2 创建django的超级用户admin1.4.3 添加serializers.py生成序列化器1.5 FBV创建视图1…...

在xml 中 不等式 做转义处理的问题

对于这种要做转义处理&#xff0c;<![CDATA[ < ]]>...

python——文件存储与写入path

path方法常常用来访问一个文件所在的地址&#xff0c;然后将地址储存在变量中。然后有不同的方法将文件内容进行处理&#xff0c;还可以将文件进行创建。 from pathlib import Path pathPath(xxxxxxx) 1.文件读取操作 (1)txt文件 常用read_text()读取文件内容&#xff0c; …...

AI 提示词(Prompt)入门 :ChatGPT 4.0 高级功能指南

这段时间 GPT4 多了很多功能&#xff0c;今天主要是增加了 GPTs Store 的介绍和 创建 GPTs 的简单方法&#xff0c;那么我们开始吧&#xff0c;文末有彩蛋。 这里主要讲解如下几个点&#xff1a; 1&#xff1a; ChatGPT 4.0 插件的使用 2&#xff1a;ChatGPT 4.0 高级数据分…...

C++:模板

目录​​​​​​​ 一.泛型编程 二.模板 函数模板 类模板 一.泛型编程 在C中&#xff0c;支持函数重载&#xff0c;如果我们通过函数重载实现通用的交换函数&#xff0c;写法如下&#xff1a; void Swap(int& left, int& right) {int temp left;left right;ri…...

假如浙江与福建合并为“浙福省”

在中国&#xff0c;很多省份之间的关系颇有“渊源”&#xff0c;例如河南与河北、湖南与湖北、广东与广西等等&#xff0c;他们因一山或一湖之隔&#xff0c;地域相近、文化相通。 但有这么两个省份&#xff0c;省名没有共通之处&#xff0c;文化上也有诸多不同&#xff0c;但…...

AI图片生成3D物体和2D视频提取3D动画

包括AI图片生成3D物体的网站&#xff1a; 第一个为Artefacts.AIhttps://app.artefacts.ai/starter 第二个为 https://3d.csm.ai/ 以下4个的视频教程连接https://www.youtube.com/watch?vmQQCyzTA_F8 第三个为Tripo AI: Tripo AI for Web 第四个为Meshy AI: Meshy - Free …...

Android 应用包名的定义 pm list packages查询的包名

问题 在AndroidManifest和build.gradle其实都有应用包名的定义&#xff0c;有时候发现两者不一样&#xff0c;那么最终编译到软件生效的是哪个呢&#xff1f; 现象 连接设备后&#xff0c;通过adb shell pm list packages 查询应用包名&#xff0c;所列的名称是在build.grad…...

递归相关练习

21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 重复子问题&#xff1a;将l1的头节点跟l2的头结点比较 得到一个较小的头节点l1 随后继续比较 将l1后面一个节点跟l2第一个节点比较 又得到一个较小的节点 不断下去 递归出口&#xff1a;当l1或者l2为空时候 返回…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

云原生玩法三问:构建自定义开发环境

云原生玩法三问&#xff1a;构建自定义开发环境 引言 临时运维一个古董项目&#xff0c;无文档&#xff0c;无环境&#xff0c;无交接人&#xff0c;俗称三无。 运行设备的环境老&#xff0c;本地环境版本高&#xff0c;ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...