28.HarmonyOS App(JAVA)多页签的实现(Tab)

 HarmonyOS App(JAVA)多页签的实现(Tab)

页面可左右滑动,点击界面1,2,3切换到对应界面

 

PageSlider的创建和使用

在layout目录下的xml文件中创建PageSlider。

<PageSlider

ohos:id="$+id:page_slider"

ohos:height="300vp"

ohos:width="300vp"

ohos:layout_alignment="horizontal_center"

/>

  1. 每个页面可能需要呈现不同的数据,因此需要适配不同的数据结构,创建TestPageProvider.java,需继承PageSliderProvider.java,必须重写以下方法:

    方法名

    作用

    getCount()

    获取可用视图的数量。

    createPageInContainer(ComponentContainer componentContainer, int position)

    在指定位置创建页面。

    destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o)

    销毁容器中的指定页面。

    isPageMatchToObject(Component component, Object o)

    视图是否关联指定对象。

PageSlider的常用方法

常用方法

方法名

作用

setProvider(PageSliderProvider provider)

设置Provider,用于配置PageSlider的数据结构。

addPageChangedListener(PageChangedListener listener)

响应页面切换事件。

removePageChangedListener(PageChangedListener listener)

移除页面切换的响应。

setOrientation(int orientation)

设置布局方向。

setPageCacheSize(int count)

设置要保留当前页面两侧的页面数。

setCurrentPage(int itemPos)

设置当前展示页面。

setCurrentPage(int itemPos, boolean smoothScroll)

设置当前展示界面,并确定是否需要平滑滚动。smoothScroll默认为true,即默认为平滑滚动。

setSlidingPossible(boolean enable)

是否启用页面滑动。enable默认为true,即默认开启页面滑动。

setReboundEffect(boolean enabled)

是否启用回弹效果。

setReboundEffectParams(int overscrollPercent, float overscrollRate,int remainVisiblePercent)

setReboundEffectParams(ReboundEffectParams reboundEffectParams)

配置回弹效果参数。

setPageSwitchTime(int durationMs)

设置页面切换时间。

响应页面切换事件

 
  1. pageSlider.addPageChangedListener(new PageSlider.PageChangedListener() {
  2. @Override
  3. public void onPageSliding(int itemPos, float itemPosOffset, int itemPosPixles) {
  4. }
  5. @Override
  6. public void onPageSlideStateChanged(int state) {
  7. }
  8. @Override
  9. public void onPageChosen(int itemPos) {
  10. }
  11. });

设置布局方向

PageSlider默认为横向布局。

在xml中设置布局方向为纵向,示例如下:

<PageSlider

  1. ohos:orientation="vertical"/>

在代码中设置,示例如下:

pageSlider.setOrientation(Component.VERTICAL);

TabList和Tab

Tablist可以实现多个页签栏的切换,Tab为某个页签。子页签通常放在内容区上方,展示不同的分类。页签名称应该简洁明了,清晰描述分类的内容。

支持的XML属性

  • Tablist的共有XML属性继承自:ScrollView

    Tablist的自有XML属性见下表:

    表1 Tablist的自有XML属性

    属性名称

    中文描述

    取值

    取值说明

    使用案例

    fixed_mode

    固定所有页签并同时显示

    boolean类型

    可以直接设置true/false,也可以引用boolean资源。

    ohos:fixed_mode="true"

    ohos:fixed_mode="$boolean:true_tag"

    orientation

    页签排列方向

    horizontal

    表示水平排列。

    ohos:orientation="horizontal"

    vertical

    表示垂直排列。

    ohos:orientation="vertical"

    normal_text_color

    未选中的文本颜色

    color类型

    可以直接设置色值,也可以引用color资源。

    ohos:normal_text_color="#FFFFFFFF"

    ohos:normal_text_color="$color:black"

    selected_text_color

    选中的文本颜色

    color类型

    可以直接设置色值,也可以引用color资源。

    ohos:selected_text_color="#FFFFFFFF"

    ohos:selected_text_color="$color:black"

    selected_tab_indicator_color

    选中页签的颜色

    color类型

    可以直接设置色值,也可以引用color资源。

    ohos:selected_tab_indicator_color="#FFFFFFFF"

    ohos:selected_tab_indicator_color="$color:black"

    selected_tab_indicator_height

    选中页签的高度

    float类型

    表示尺寸的float类型。

    可以是浮点数值,其默认单位为px;也可以是带px/vp/fp单位的浮点数值;也可以引用float资源。

    ohos:selected_tab_indicator_height="100"

    ohos:selected_tab_indicator_height="20vp"

    ohos:selected_tab_indicator_height="$float:size_value"

    tab_indicator_type

    页签指示类型

    invisible

    表示选中的页签无指示标记。

    ohos:tab_indicator_type="invisible"

    bottom_line

    表示选中的页签通过底部下划线标记。

    ohos:tab_indicator_type="bottom_line"

    left_line

    表示选中的页签通过左侧分割线标记。

    ohos:tab_indicator_type="left_line"

    oval

    表示选中的页签通过椭圆背景标记。

    ohos:tab_indicator_type="oval"

    tab_length

    页签长度

    float类型

    表示尺寸的float类型。

    可以是浮点数值,其默认单位为px;也可以是带px/vp/fp单位的浮点数值;也可以引用float资源。

    ohos:tab_length="100"

    ohos:tab_length="20vp"

    ohos:tab_length="$float:size_value"

    tab_margin

    页签间距

    float类型

    表示尺寸的float类型。

    可以是浮点数值,其默认单位为px;也可以是带px/vp/fp单位的浮点数值;也可以引用float资源。

    ohos:tab_margin="100"

    ohos:tab_margin="20vp"

    ohos:tab_margin="$float:size_value"

    text_alignment

    文本对齐方式

    left

    表示文本靠左对齐。

    可以设置取值项如表中所列,也可以使用“|”进行多项组合。

    ohos:text_alignment="center"

    ohos:text_alignment="top|left"

    top

    表示文本靠顶部对齐。

    right

    表示文本靠右对齐。

    bottom

    表示文本靠底部对齐。

    horizontal_center

    表示文本水平居中对齐。

    vertical_center

    表示文本垂直居中对齐。

    center

    表示文本居中对齐。

    start

    表示文本靠起始端对齐。

    end

    表示文本靠结尾端对齐。

    text_size

    文本大小

    float类型

    表示尺寸的float类型。

    可以是浮点数值,其默认单位为px;也可以是带px/vp/fp单位的浮点数值;也可以引用float资源。

    ohos:text_size="100"

    ohos:text_size="16fp"

    ohos:text_size="$float:size_value"

 ability_main.xml

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:height="match_parent"
    ohos:width="match_parent"
    ohos:alignment="center"
    ohos:orientation="vertical">

    <PageSlider
        ohos:id="$+id:page_slider"
        ohos:height="0vp"
        ohos:width="match_parent"
        ohos:background_element="#fffff"
        ohos:layout_alignment="horizontal_center"
        ohos:weight="1"
        />
    <TabList
        ohos:id="$+id:tab_list"
        ohos:height="60vp"
        ohos:width="match_parent"
        ohos:background_element="gray"
        ohos:orientation="horizontal"
        />

</DirectionalLayout>

MainAbilitySlice.java

package com.example.myapplication.slice;

import com.example.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.*;
import ohos.agp.components.PageSlider;
import ohos.agp.render.opengl.Utils;
import ohos.agp.utils.Color;
import ohos.agp.utils.TextAlignment;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;



import java.util.ArrayList;

public class MainAbilitySlice extends AbilitySlice {
    private PageSlider mPageSlider;
    private ArrayList<Component> mPageview; //需要pageSlider对象管理的用户界面列表
    private TabList mTabList;
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        //获取pageSlider对象
        mPageSlider =(PageSlider) findComponentById(ResourceTable.Id_page_slider);
        //创建PageSlider所需要承载界面的列表
        mPageview = new ArrayList<Component>();
        mPageview.add(generateTextComponent("第一个界面"));
        mPageview.add(generateTextComponent("第二个界面"));
        mPageview.add(generateTextComponent("第三个界面"));
        //为pageSlider提供界面
        mPageSlider.setProvider(new PageSliderProvider() {
            @Override
            public int getCount() {
                return mPageview.size();
            }

            @Override
            public Object createPageInContainer(ComponentContainer componentContainer, int i) {
                componentContainer.addComponent(mPageview.get(i));
                return mPageview.get(i);
            }

            @Override
            public void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) {
             componentContainer.removeComponent(mPageview.get(i));
            }

            @Override
            public boolean isPageMatchToObject(Component component, Object o) {
                return component == o;
            }
        });

        //获取TabList对象
        mTabList =(TabList) findComponentById(ResourceTable.Id_tab_list);
        mTabList.setTabLength(getResourceManager().getDeviceCapability().width);
        for(int i=0;i<3;i++)
        {
            TabList.Tab tab = mTabList.new Tab(this);
            tab.setText("界面"+(i+1));
            tab.setMarginsLeftAndRight(8,8);
            tab.setTag(i);
            mTabList.addTab(tab);
        }
        mTabList.addTabSelectedListener(new TabList.TabSelectedListener() {
            @Override
            public void onSelected(TabList.Tab tab) {

                mPageSlider.setCurrentPage((int)tab.getTag());
                HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x12345, "MainAbilitySlice"); // 创建HiLog标签对象

                String tag = "MyTag"; // 设置日志的tag名称
                //  int level = HiLogConstants.DEBUG; // 设置日志等级为调试模式

                HiLog.debug(label, "%s", "已选择"+tab.getText());
            }

            @Override
            public void onUnselected(TabList.Tab tab) {
              //Utils.log("aaa");
                HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x12345, "MainAbilitySlice"); // 创建HiLog标签对象

                String tag = "MyTag"; // 设置日志的tag名称
              //  int level = HiLogConstants.DEBUG; // 设置日志等级为调试模式

                HiLog.debug(label, "%s", "Unselected选择"+tab.getText());
            }

            @Override
            public void onReselected(TabList.Tab tab) {
                HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x12345, "MainAbilitySlice"); // 创建HiLog标签对象

                String tag = "MyTag"; // 设置日志的tag名称
                //  int level = HiLogConstants.DEBUG; // 设置日志等级为调试模式

                HiLog.debug(label, "%s", "OnReselected选择"+tab.getText());
            }
        });

    }

    private Text generateTextComponent(String content) {
    Text text = new Text(this);
    text.setLayoutConfig(new ComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT, ComponentContainer.LayoutConfig.MATCH_PARENT));
    text.setTextAlignment(TextAlignment.CENTER);
    text.setText(content);
    text.setTextSize(60);
    text.setTextColor(Color.BLUE);
    return text;
    }


    @Override
    public void onActive() {
        super.onActive();
    }

    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java编程实战:小区管理系统的设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

MySQL之索引详解

华子目录 索引概述优缺点 索引的原理索引的设计原则索引结构B-tree&#xff08;多路平衡查找树&#xff09;BtreeHash 为什么InnoDB存储引擎选择Btree&#xff1f;索引分类聚集索引选取规则 单列索引和多列索引前缀索引创建索引1.创建表时创建索引2.在已经存在的表上创建索引3.…

Muduo库核心代码及优秀编程细节剖析

一、前言&#xff1a; Muduo库是陈硕个人开发的Tcp网络编程库&#xff0c;支持Reactor模型。这篇博文对Muduo库中的Multi-reactor架构代码进行逻辑梳理&#xff0c;同时认真剖析了作者每一处精妙的代码设计思想。 目前我只重构并剖析了Muduo库中的核心部分&#xff0c;即Mult…

了解处理器

了解处理器 摘要写在前面1. 计算机简介1.1.计算机发展简史1.2.计算机分类1.3.PC机结构 2.初识处理器2.1.处理器的硬件模型2.2.处理器的编程模型2.3.处理器的分层模型2.4.如何选择处理器 3.指令集体系结构3.1.处理器编程模型3.2.指令集发展历程3.3.指令集分类3.4.汇编语言格式3.…

第三百七十六回

文章目录 1 .概念介绍2. 实现方法3. 示例代码 我们在上一章回中介绍了在页面之间共传递数据相关的内容&#xff0c;本章回中将介绍如何拦截路由.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1 .概念介绍 本章回中介绍的路由拦截是指在路由运行过程中&#xff0c;对路由做…

Java进阶(锁)——锁的升级,synchronized与lock锁区别

目录 引出Java中锁升级synchronized与lock锁区别 缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 Java进阶&#xff08;锁&#xff09;——锁的升级&#xff0c;synchronized与lock锁区别 Java中锁升级 看一段代码&#xff1a; public class…

Python学习 day06(类、对象、构造方法、私有方法、继承

类 程序中数据的组织多种多样&#xff0c;如果我们简单用变量来记录&#xff0c;就会混乱、不统一&#xff0c;如下所示&#xff1a; 类比现实中的表格&#xff0c;我们可以用类来组织数据&#xff0c;如下&#xff1a; 类的定义和使用 类中的变量叫做成员变量&#xff0c;类中…

mysql,for循环执行sql

遇到一个问题&#xff0c;我需要模拟上百万数据来优化sql&#xff0c;线上数据down不下来&#xff0c;测试库又没有&#xff0c;写代码执行要么慢要么就是sql语句太长。 于是&#xff0c;直接用mysql自带的功能去实现&#xff01; 简单而简单 mysql可以for循环&#xff1f;没…

python中版本,操作系统等问题汇总

1. linux源码部署到windows 1.1ModuleNotFoundError: No module named pwd 这个问题&#xff0c;是因为源码是给linux的。这里在windows中&#xff0c;没有该命令。 解决方法之一&#xff0c;在相应的环境目录中&#xff0c;如图中<MetaGPTenv>虚拟环境中&#xff0c;在…

Unity 预制体与变体

预制体作用&#xff1a; 更改预制体&#xff0c;则更改全部的以预制体复制出的模型。 生成预制体&#xff1a; 当你建立好了一个模型&#xff0c;从层级拖动到项目中即可生成预制体。 预制体复制模型&#xff1a; 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…

可用于智能客服的完全开源免费商用的知识库项目

介绍 FastWiki项目是一个高性能、基于最新技术栈的知识库系统&#xff0c;专为大规模信息检索和智能搜索设计。利用微软Semantic Kernel进行深度学习和自然语言处理&#xff0c;结合.NET 8和MasaBlazor前端框架&#xff0c;后台采用.NET 8MasaFrameworkSemanticKernel&#xff…

微信小程序云开发教程——墨刀原型工具入门(安装以及基础使用教程)

引言 作为一个小白&#xff0c;小北要怎么在短时间内快速学会微信小程序原型设计&#xff1f; “时间紧&#xff0c;任务重”&#xff0c;这意味着学习时必须把握微信小程序原型设计中的重点、难点&#xff0c;而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

IO-DAY2

用发write、fread将一张随意图片修改成德国国旗 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> int main(int argc, char *argv[]) {FILE* fpfopen("./122.bmp","r");int w 0,h 0;fseek(fp,18,…

队列的结构概念和实现

文章目录 一、队列的结构和概念二、队列的实现三、队列的实现函数四、队列的思维导图 一、队列的结构和概念 什么是队列&#xff1f; 队列就是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 如上图所示&#x…

经典文献阅读之--CamMap(基于SLAM地图对不共视相机进行外参标定)

0. 简介 由于多相机之间通常存在有限或无重叠的视场&#xff0c;因此在估计外参相机参数时面临着一定的挑战&#xff0c;为了解决这个问题&#xff0c;本文提出了CamMap&#xff1a;一种新颖的6自由度外参标定流程。根据三个操作规则&#xff0c;使一个多相机系统单独捕捉一些…

《Spring Security 简易速速上手小册》第4章 授权与角色管理(2024 最新版)

文章目录 4.1 理解授权4.1.1 基础知识详解授权的核心授权策略方法级安全动态权限检查 4.1.2 主要案例&#xff1a;基于角色的页面访问控制案例 Demo 4.1.3 拓展案例 1&#xff1a;自定义投票策略案例 Demo测试自定义投票策略 4.1.4 拓展案例 2&#xff1a;使用方法级安全进行细…

MyBatis 学习(三)之 MyBatis 全局配置文件

目录 1 MyBatis 全局配置文件 2 properties 元素 3 setting 设置 4 typeAlianses 别名处理器 5 typeHandler 类型处理器 6 objectFacotry 对象工厂&#xff08;了解&#xff09; 7 plugins 插件&#xff08;了解&#xff09; 8 environments 运行环境 9 databaseIdPro…

cpp基础学习笔记03:类型转换

static_cast 静态转换 用于类层次结构中基类和派生类之间指针或者引用的转换。up-casting (把派生类的指针或引用转换成基类的指针或者引用表示)是安全的&#xff1b;down-casting(把基类指针或引用转换成子类的指针或者引用)是不安全的。用于基本数据类型之间的转换&#xff…

ORACLE 基础

一.ORACLE简介 1.1什么是oracle ORACLE 数据库系统是美国 ORACLE 公司&#xff08;甲骨文&#xff09;提供的以分布式数据库为核心的一组软件产品&#xff0c;是目前最流行的客户/服务器(CLIENT/SERVER)或 B/S 体系结构的数据库之一。 ORACLE 通常应用于大型系统的数据库产品。…

[HackMyVM]靶场 Adria

kali:192.168.56.104 主机发现 arp-scan -l 靶机:192.168.56.108 端口扫描 nmap -p- 192.168.56.108 开启了 22 80 139 445端口 进入web 编辑 /etc/hosts&#xff0c;把192.168.56.108 adria.hmv添加进去重新访问 里面没什么有用的东西&#xff0c;注册需要邮箱&#xff0c;…