自學鴻蒙應用開發(17)- TabList和Tab
本文介紹在鴻蒙應用中TabList和TabList.Tab元件的基本用法。
具體步驟,可點選
準備TabList頁面佈局
在layout目錄下建立TabList佈局,將其命名為ability_tablist.xml。
<?xml version="1.0" encoding="utf-8"?><DirectionalLayout xmlns:ohos="
佈局程式碼中第7行~第22行的用於生成TabList元件,定義了TabList的基本屬性;第23行~第27行用於生成Tab頁面的容器,目前還沒有具體內容,稍後有具體程式碼生成。
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:ohos=">
準備Image頁面
Image頁面主要包含一個Image檔案和簡單的文字表示:
<?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:orientation="vertical"> <Component ohos:height="0vp" ohos:weight="3" ohos:width="match_parent" /> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_content" ohos:width="match_content" ohos:layout_alignment="center" ohos:orientation="vertical"> <Image ohos:id="$+id:image" ohos:width="match_content" ohos:height="match_content" ohos:layout_alignment="center" ohos:image_src="$media:DevEco" /> <Component ohos:height="20vp" ohos:width="match_parent" /> <Text ohos:id="$+id:text_helloworld" ohos:height="match_content" ohos:width="match_content" ohos:layout_alignment="horizontal_center" ohos:text="Image Tab" ohos:text_color="#007F00" ohos:text_size="100" /> </DirectionalLayout> <Component ohos:height="0vp" ohos:weight="5" ohos:width="match_parent" /></DirectionalLayout>
準備Video頁面
Video頁面包含一個動畫,稍微複雜一些。首先是頁面本身:
<?xml version="1.0" encoding="utf-8"?><DirectionalLayout xmlns:ohos="
這個檔案和Image頁面區別不大,只是在用Component元件代替了Image元件。而動畫的實際內容則是由graphic目錄中的animation_element.xml檔案決定:
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:ohos=">
生成TabList畫面
TabList的每個Tab頁面需要由程式碼生成,具體參見下面的頁面類:
package com.example.helloharmony.slice;import com.example.helloharmony.ResourceTable;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.agp.components.*;import ohos.agp.components.element.FrameAnimationElement;import java.io.Console;public class TablistAbilitySlice extends AbilitySlice { private Component imageContent; private Component videoContent; private FrameAnimationElement frameAnimationElement; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_tablist); TabList tabList = (TabList) findComponentById(ResourceTable.Id_tab_list); tabList.setTabLength(200); // 設定Tab的寬度 tabList.setTabMargin(26); // 設定兩個Tab之間的間距 TabList.Tab tab1 = tabList.new Tab(getContext()); tab1.setText("Image"); tabList.addTab(tab1); TabList.Tab tab2 = tabList.new Tab(getContext()); tab2.setText("Video"); tabList.addTab(tab2); AbilitySlice slice = this; tabList.addTabSelectedListener(new TabList.TabSelectedListener() { @Override public void onSelected(TabList.Tab tab) { ComponentContainer container = (ComponentContainer) findComponentById(ResourceTable.Id_tab_container); if(tab.getText().equals("Image")) { imageContent = LayoutScatter.getInstance(slice).parse(ResourceTable.Layout_iamge_tab, null, false); container.addComponent(imageContent); } else { videoContent = LayoutScatter.getInstance(slice).parse(ResourceTable.Layout_video_tab, null, false); frameAnimationElement = new FrameAnimationElement(slice.getContext(), ResourceTable.Graphic_animation_element); Component videoArea = videoContent.findComponentById(ResourceTable.Id_video_area); videoArea.setBackground(frameAnimationElement); frameAnimationElement.start(); container.addComponent(videoContent); } } @Override public void onUnselected(TabList.Tab tab) { if(tab.getText().equals("Video")) { frameAnimationElement.start(); } ComponentContainer container = (ComponentContainer) findComponentById(ResourceTable.Id_tab_container); container.removeAllComponents(); } @Override public void onReselected(TabList.Tab tab) { ComponentContainer container = (ComponentContainer) findComponentById(ResourceTable.Id_tab_container); if(tab.getText().equals("Image")) { container.addComponent(imageContent); } else { frameAnimationElement.start(); container.addComponent(videoContent); } } }); //最開始選選擇tab1 tabList.selectTab(tab1); } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); }}
程式碼第22行~第27行分別生成了Image和Video兩個Tab頁。
第29行~第69行是為TabList的各種事件提供響應。需要響應的處理主要有Tab頁選擇,Tab頁取消選擇和Tab重新選擇。程式碼中根據當前選中的Tab頁面生成或選擇不同的元件。
參考文件
TabList和Tab 元件
TabList類
https://developer.harmonyos.com/cn/docs/documentation/doc-references/tablist-0000001054238721
Tab List.Tab類
https://developer.harmonyos.com/cn/docs/documentation/doc-references/tablist_tab-0000001054678691
動畫開發指導
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-animation-0000000000580278
原文連結:
https://developer.huawei.com/consumer/cn/forum/topic/0201551132050440304?fid=0101303901040230869
原作者:物件導向思考
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69970551/viewspace-2771154/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用Taro開發鴻蒙原生應用——快速上手,鴻蒙應用開發指南鴻蒙
- 使用 Taro 開發鴻蒙原生應用 —— 快速上手,鴻蒙應用開發指南鴻蒙
- 鴻蒙OS 2.0應用開發初潮鴻蒙
- Linux應用開發自學之路Linux
- 鴻蒙系統應用基礎開發鴻蒙
- 鴻蒙系統應用開發之開發準備鴻蒙
- HarmonyOS NEXT應用開發之Tab元件實現增刪Tab標籤元件
- 鴻蒙 Android iOS 應用開發對比02鴻蒙AndroidiOS
- 鴻蒙原生應用開發——分散式資料物件鴻蒙分散式物件
- Android應用開發—TabLayout定製化Tab樣式AndroidTabLayout
- 加速鴻蒙生態共建,螞蟻mPaaS助力鴻蒙原生應用開發創新鴻蒙
- 鴻蒙應用開發-DevEco Studio 模板體驗(一)鴻蒙dev
- 鴻蒙應用開發-DevEco Studio 模板體驗(三)鴻蒙dev
- 鴻蒙應用開發-DevEco Studio 模板體驗(四)鴻蒙dev
- 鴻蒙系統應用開發之入門解說鴻蒙
- 雷霆遊戲加入鴻蒙“朋友圈”,《問道》手遊啟動鴻蒙原生應用開發遊戲鴻蒙
- 鴻蒙真的是套殼嗎?HarmonyOS應用開發初體驗,Java原生和JavaScript的mvvm開發鴻蒙JavaScriptMVVM
- 米哈遊宣佈啟動鴻蒙原生應用開發鴻蒙
- 《三國殺》完成鴻蒙原生應用開發,更多遊戲品類加入鴻蒙生態鴻蒙遊戲
- HarmonyOS NEXT應用開發—自定義檢視實現Tab效果
- 鴻蒙系統應用開發之基於API6的藍芽開發鴻蒙API藍芽
- 軟通動力鴻蒙書籍《HarmonyOS應用開發》正式出版鴻蒙
- 優酷鴻蒙開發實踐 | 鴻蒙卡片開發鴻蒙
- Windows phone應用開發[17]-xap提交異常處理Windows
- 《保衛蘿蔔4》僅用一個月完成鴻蒙原生應用開發鴻蒙
- 鷹角網路宣佈將啟動鴻蒙原生應用開發鴻蒙
- 【鴻蒙千帆起】《開心消消樂》完成鴻蒙原生應用開發,創新多端聯動使用者體驗鴻蒙
- DevEco Studio 2.0開發鴻蒙HarmonyOS應用初體驗全面測評dev鴻蒙
- 庫洛遊戲宣佈《戰雙帕彌什》將啟動鴻蒙原生應用開發遊戲鴻蒙
- 鴻蒙js開發7 鴻蒙分組列表和彈出menu選單鴻蒙JS
- 鴻蒙生態夥伴SDK市場正式釋出,驅動千行百業鴻蒙原生應用開發鴻蒙
- HDC 2022重磅首發《鴻蒙生態應用開發白皮書》,附全文鴻蒙
- 中手遊全面啟動鴻蒙原生應用開發,為遊戲產業發展注入新活力鴻蒙遊戲產業
- 鴻蒙JS 開發整理鴻蒙JS
- 鴻蒙開發案例:直尺鴻蒙
- 鴻蒙系統應用開發之JS實現一個簡單的List鴻蒙JS
- 全新適配鴻蒙生態,Cocos引擎助力3D應用開發鴻蒙3D
- 嗶哩嗶哩遊戲宣佈《碧藍航線》將啟動鴻蒙原生應用開發遊戲鴻蒙