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

这篇具有很好参考价值的文章主要介绍了28.HarmonyOS App(JAVA)多页签的实现(Tab)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

 28.HarmonyOS App(JAVA)多页签的实现(Tab),鸿蒙系统APP开发_应用程序开发,harmonyos,java,华为

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文章来源地址https://www.toymoban.com/news/detail-837412.html

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);
    }
}

到了这里,关于28.HarmonyOS App(JAVA)多页签的实现(Tab)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 鸿蒙 ArkTS Tabs组件实现类微信(可滑动的)tabBar页签切换页面功能

    :harmonyOS   鸿蒙开发  ArkTS  TabContent 使用场景:类微信底部导航栏,点击/左右滑动切换页面并加载数据 开发环境:ArkTS3.1  API9  Phone设备 HMOS Dev官方文档:文档中心 演示效果: 目录 完整Demo已提交至Gitee 搭建页面 自定义TabContent(往后翻有完整代码) 思路 开始 完

    2024年02月04日
    浏览(60)
  • HarmonyOS ArkTS TabContent组件实现类微信(可滑动的)tabBar页签切换页面功能

    :harmonyOS   鸿蒙开发  ArkTS  TabContent 使用场景:类微信底部导航栏,点击/左右滑动切换页面并加载数据 开发环境:ArkTS3.1  API9  Phone设备 HMOS Dev官方文档:文档中心 演示效果: 目录 完整Demo已提交至Gitee 搭建页面 自定义TabContent(往后翻有完整代码) 思路 开始 完

    2024年02月05日
    浏览(55)
  • 鸿蒙App开发-网络请求-下拉刷新三方库-底部Tab栏-滚动组件(含源码)

    本文介绍一个基于鸿蒙ArkTS开发的App,是一个包含轮播图、文章列表和 Web 页面等功能的多页面应用。 本文主要内容包括: 一、效果图 首页 详情页    二、内容简介 1.底部Tab栏和两个页面         App底部是一个TabBar,点击TabBar可以切换上面的页面。共包含两个页面,一个

    2024年02月01日
    浏览(53)
  • HarmonyOS鸿蒙基于Java开发: 基于JS UI实现的Java卡片开发

    使用hml+css+json开发JS卡片页面。 创建成功后,在config.json的module中会生成js模块,用于对应卡片的js相关资源,配置示例如下: config.json文件“abilities”配置forms模块细节如下。 说明 配置文件中,应注意如下配置: 表1  forms对象的内部结构说明 属性名称 子属性名称 含义

    2024年02月20日
    浏览(54)
  • 初识基于鸿蒙系统(HarmonyOS)的App开发

    网传鸿蒙系统的下一个版本不再支持安卓,这几天看了一遍基于鸿蒙系统的App开发,现在二刷,顺便总结一下写一些心得或笔记吧。 先说IDE,IDE支持主流的Windows、Mac,包括M系列芯片的Mac,使用M芯片Mac的小伙伴看见有专门支持的软件,心里还是比较开心的,至少我是,嘿嘿。

    2024年01月19日
    浏览(78)
  • 『牛角书』HarmonyOS鸿蒙实战 开发一个简单聊天助手APP

    我是通过b站上面老师的讲解,跟着老师编写了一个简单聊天助手app,简答实用,对于刚开始接触鸿蒙的我们来说很有帮助。 所用软件为DevEco Studio,点击Create HarmonyOS Project,这里选择了第一个空的项目,点击next会跳至下一个页面。 这里是项目的名称,因为是一个demo,就没有

    2024年02月12日
    浏览(47)
  • 详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第五节 (基于uni-app封装鸿蒙接口请求库)

      随着鸿蒙系统的兴起,越来越多的app会采用鸿蒙开发。而鸿蒙开发必不可少的就是调用各种接口服务。为了简化接口的调用流程,我们通常会做一层封装。今天就来讲解一下,如何用uni-app封装鸿蒙的接口请求库。   首先我们要新建一个鸿蒙项目啦!当然选择第一个空白项

    2024年02月02日
    浏览(63)
  • 【开源-土拨鼠充电系统】鸿蒙 HarmonyOS 4.0 App+微信小程序+云平台

    ✨本人自己开发的开源项目:土拨鼠充电系统 ✨踩坑不易,还希望各位大佬支持一下,在 Gitee 或 GitHub 给我点个  Start  ⭐⭐👍👍 ✍Gitee开源项目地址 👉: https://gitee.com/cheinlu/groundhog-charging-system ✍GitHub开源项目地址 👉 :https://github.com/cheinlu/groundhog-charging-system 土拨鼠开

    2024年03月26日
    浏览(78)
  • Java之父詹姆斯·高斯林 (James Gosling)学鸿蒙(HarmonyOS),HarmonyOS(鸿蒙)——Image组件详述

     本文已收录于专栏 ❤️《鸿蒙开发》❤️ 欢迎各位关注、三连博主的文章及专栏,每周定期更新1-5篇基础文章,共勉! Image是用来显示图片的组件,我们在开发中使用的非常频繁! ​ Image也是组件,它继承自: ohos.agp.components.Component ​ 我们在使用Image组件的时候,只需要

    2024年02月11日
    浏览(48)
  • HarmonyOS鸿蒙基于Java开发: 相机开发

    目录 相机开发流程 接口说明 相机权限申请 相机设备创建 相机设备配置 相机帧捕获 相机设备释放 相机模块主要工作是给相机应用开发者提

    2024年01月20日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包