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"?>
<DirectionalLayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:alignment="center"ohos:orientation="vertical"><PageSliderohos:id="$+id:page_slider"ohos:height="0vp"ohos:width="match_parent"ohos:background_element="#fffff"ohos:layout_alignment="horizontal_center"ohos:weight="1"/><TabListohos: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;@Overridepublic 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() {@Overridepublic int getCount() {return mPageview.size();}@Overridepublic Object createPageInContainer(ComponentContainer componentContainer, int i) {componentContainer.addComponent(mPageview.get(i));return mPageview.get(i);}@Overridepublic void destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) {componentContainer.removeComponent(mPageview.get(i));}@Overridepublic 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() {@Overridepublic 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());}@Overridepublic 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());}@Overridepublic 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;}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/713601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/713601.shtml
英文地址,請注明出處:http://en.pswp.cn/news/713601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2D割草/吸血鬼游戲 性能優化——GPU Spine動畫

視頻中萬人同屏方案(gpu動畫、渲染、索敵、避障等功能)&#xff0c;可某寶搜店鋪&#xff1a;【游戲開發資源商店】獲取整套方案源碼。 在過去的幾年里&#xff0c;割草、類吸血鬼玩法的游戲頻出爆款&#xff0c;其豐富的技能、滿屏特效、刷怪清屏的解壓暢快是此類游戲的核心&…

【MySQL】復合查詢(重點)-- 詳解

一、基本查詢練習回顧 1、查詢工資高于 500 或崗位為 MANAGER 的雇員&#xff0c;同時還要滿足他們的姓名首字母為大寫的 J 2、按照部門號升序而雇員的工資降序排序 3、使用年薪進行降序排序 4、顯示工資最高的員工的名字和工作崗位 5、顯示工資高于平均工資的員工信息 6、顯…

韋東山嵌入式Liunx入門驅動開發四

文章目錄 一、異常與中斷的概念及處理流程1-1 中斷的引入1-2 棧(1) CPU實現a ab的過程(2) 進程與線程 1-3 Linux系統對中斷處理的演進1-4 Linux 中斷系統中的重要數據結構(1) irq_desc 結構體(2) irqaction 結構體(3) irq_data 結構體(4) irq_domain 結構體(5) irq_domain 結構…

Redis入門與應用

Redis入門與應用 Redis的技術全景 Redis一個開源的基于鍵值對&#xff08;Key-Value&#xff09;NoSQL數據庫。使用ANSI C語言編寫、支持網絡、基于內存但支持持久化。性能優秀&#xff0c;并提供多種語言的API。 兩大維度 兩大維度&#xff1a;應用維度、底層原理維度 我們…

Java面試題:解釋Java內存模型中的棧內存和本地方法棧的區別,解釋Java中的垃圾回收機制中的增量收集算法,解釋Java內存模型中的直接內存的作用

Java內存模型與JVM面試題解析 在Java面試中&#xff0c;對Java內存模型&#xff08;JMM&#xff09;的理解是衡量候選人是否具備扎實Java功底的重要指標。JMM涵蓋了JVM的內存結構&#xff0c;包括堆、棧、方法區等關鍵組件&#xff0c;以及垃圾回收機制等核心概念。下面&#…

記一次dockerfile無法構建問題追溯

我有一個dockerfile如下&#xff1a; ENTRYPOINT ["/sbin/tini"&#xff0c;"-g", "--"] CMD /home/scrapy/start.sh 我原本的用意是先啟動tini&#xff0c;再執行下面的cmd命令啟動start.sh。 為啥要用tini&#xff1f; 因為我的這個docker…

git介紹4.2

git(版本控制工具) 一、git 介紹 1、git是目前世界上最先進的分布式版本控制系統&#xff0c;可以有效&#xff0c;高速的處理從小到大的項目版本管理。 2、git是linux torvalds 為了幫助管理linux內核開發二開發的一個開放源碼的版本控制軟件。 3、git作用&#xff1a;更好…

谷歌內部文件泄露:開源AI將領先谷歌與OpenAI

摘要&#xff1a; 一個谷歌研究員的內部文件透露&#xff0c;當前的人工智能&#xff08;AI&#xff09;競賽中&#xff0c;谷歌和OpenAI可能無法取勝。開源AI項目因其快速創新和低成本實現而已在悄悄領先&#xff0c;它們表現出在自定義性、隱私保護、以及性能方面的明顯優勢。…

PageHelper開源框架解讀

在使用springboot開發系統時&#xff0c;列表查詢經常會用PageHelper來進行分頁。使用起來很方便&#xff0c;但從未想過它的實現原理&#xff0c;所以對其進行解讀。 Service public class ScUserServiceImpl extends ServiceImpl<ScUserMapper, ScUser> implements IS…

WIN10 無密碼自動登錄

1、家里重裝了一下WIN10系統&#xff0c;第一次登陸居然用了微軟網站賬號&#xff0c;結果密碼忘記了&#xff0c;后面只能用PIN碼登陸系統。 2、需要登錄微軟的網站修改密碼&#xff1a; Microsoft account | Sign In or Create Your Account Today – Microsoft 3、在運行…

Linux-Prnt10:幾款國際打印機

這周接觸到惠普國際生產的幾款打印機設備&#xff0c;hplip的官網更新記錄里居然都沒有&#xff0c;特地確認了下其中緣由。這三款設備的型號分別是mpressora HP Laser 107w、mpressora Multifuncional HP Laser MFP 135a、mpressora Multifuncional HP Laser MFP 135w&#xf…

APP自動化測試-入門示例

入門示例 通過上一篇博客APP自動化測試介紹-CSDN博客的學習&#xff0c;相信大家對APP自動化測試已經有了一定的了解&#xff0c;下面演示一下入門示例 1. 配置Appium 1.1. 點擊Appium圖標&#xff0c;打開服務器&#xff1a; 1.2. 點擊Edit Configurations,進入配置頁面&am…

【LeetCode】【滑動窗口長度不固定】978 最長湍流子數組

1794.【軟件認證】最長的指定瑕疵度的元音子串 這個例題&#xff0c;是滑動窗口中長度不定求最大的題目&#xff0c;在看題之前可以先看一下【leetcode每日一題】【滑動窗口長度不固定】案例。 題目描述 定義&#xff1a;開頭和結尾都是元音字母&#xff08;aeiouAEIOU&…

Python腳本之打印乘法口訣表

Python腳本之打印乘法口訣表 for i in range(1, 10):for j in range(1, i 1):print(f"{j} * {i} {i * j}", end"\t")print()

GIT基本的命令

文章目錄 04.GIT本地操作-初始化工作區內容小結 05.GIT本地操作-add與commit目標內容小結 06.GIT本地操作-差異比較目標內容小結 07.GIT本地操作-版本回退目標內容小結 08.GIT本地操作-修改撤消目標內容小結 09.GIT本地操作-總結 04.GIT本地操作-初始化工作區 內容 初始化工作…

Java對象大小計算

概述 在實際應用中&#xff0c;尤其是在進行JVM調優時&#xff0c;理解并正確估計對象大小是非常重要的&#xff0c;因為這直接影響到內存分配、垃圾回收效率以及應用程序的整體性能。 對象的組成 在Java中&#xff0c;計算一個對象的大小是為了了解它在內存中占用的確切空間…

【c++基礎】挑戰賽第二題——放大的X

說明 請你編程畫一個放大的’X’&#xff08;大寫字母&#xff09;。 如3*3的’X’應如下所示&#xff1a; x xxx x 5*5的’X’如下所示&#xff1a; X XX XXX X X X 輸入數據 有一個正奇數n&#xff08;3 < n < 79&#xff09;&#xff0c;表示放大的規格。 …

m位數問題(c++題解)

題目描述 考官只給兩個整數n和m&#xff08;1 < n < 8&#xff0c;1< m <5&#xff09;&#xff0c;要求選手從1,2,…,n中取出m個數字&#xff0c;組成一個m位整數&#xff0c;統計所有的m位整數中一共有多少個素數。 如n3,m2時&#xff0c;符合條件的整數有&…

(C語言) time庫-日期和時間工具

文章目錄 ?介紹?常量??CLOCKS_PER_SEC ?類型??tm??time_t??clock_t??timespec (C11) ?函數-時間操作??time&#x1f3f7;?返回紀元開始經過的當前系統日歷時間??clock&#x1f3f7;?返回未加工的程序啟動時開始經過的處理器時間??difftime&#x1f3f7;?…

(delphi11最新學習資料) Object Pascal 學習筆記---第6章第3節(字符串連接)

6.3.3 字符串連接 ? 我已經提到過&#xff0c;與其他語言不同&#xff0c;Object Pascal 完全支持直接字符串連接&#xff0c;這實際上是一個相當快的操作。在本章中&#xff0c;我將向您展示一些字符串連接代碼和一些速度測試。稍后&#xff0c;在第 18 章中&#xff0c;我將…