赞
踩
HarmonyOS App(JAVA)多页签的实现(Tab)
页面可左右滑动,点击界面1,2,3切换到对应界面
在layout目录下的xml文件中创建PageSlider。
<PageSlider
ohos:id="$+id:page_slider"
ohos:height="300vp"
ohos:width="300vp"
ohos:layout_alignment="horizontal_center"
/>
方法名 | 作用 |
---|---|
getCount() | 获取可用视图的数量。 |
createPageInContainer(ComponentContainer componentContainer, int position) | 在指定位置创建页面。 |
destroyPageFromContainer(ComponentContainer componentContainer, int i, Object o) | 销毁容器中的指定页面。 |
isPageMatchToObject(Component component, Object o) | 视图是否关联指定对象。 |
方法名 | 作用 |
---|---|
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) | 设置页面切换时间。 |
PageSlider默认为横向布局。
在xml中设置布局方向为纵向,示例如下:
<PageSlider
在代码中设置,示例如下:
pageSlider.setOrientation(Component.VERTICAL);
Tablist可以实现多个页签栏的切换,Tab为某个页签。子页签通常放在内容区上方,展示不同的分类。页签名称应该简洁明了,清晰描述分类的内容。
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);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。