选项卡的作用在于将一个复杂的页面分隔成若干个标签页,实现对信息的分类和管理,使用该组件不仅可以使界面简洁大方,还可以有效地降低窗体的个数。

TabControlView

选项卡控制器,支持选项数量、样式的自定义。如果有多选需求的话(类似开关),可使用MultiTabControlView控件,支持多选,api与TabControlView相仿。

  • 演示效果

TabBar - 图1

  • 使用案例
  1. <com.xuexiang.xui.widget.tabbar.TabControlView
  2. android:id="@+id/tcv_select"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. app:tcv_defaultSelection="0"/>
  6. <com.xuexiang.xui.widget.tabbar.MultiTabControlView
  7. android:id="@+id/tcv_multi_select"
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. app:tcv_defaultSelection="0"/>
  • 属性表: (TabControlView)
属性名类型默认值备注
tcv_textSizedimension14sp文字字体的大小
tcv_unselectedTextColorreference#299EE3没选中的文字颜色
tcv_selectedTextColorreferenceColor.WHITE选中的文字颜色
tcv_unselectedColorreferenceColor.TRANSPARENT没选中的背景颜色
tcv_selectedColorreference#299EE3选中的背景颜色
tcv_strokeWidthdimension1dp边框宽度
tcv_itemsreference/选项卡中展示的内容
tcv_valuesreference/选项卡中选中的内容
tcv_equalWidthbooleanfalse是否等宽显示
tcv_stretchbooleanfalse是否伸展开,填充整个父布局
tcv_defaultSelectioninteger-1默认选中项的索引

常用方法

  • 设置选项卡中展示和选中的内容集合:setItems(String[] itemArray, String[] valueArray)
  • 设置默认选中项:setDefaultSelection(int defaultSelection)
  • 设置选项卡选中状态变化监听:setOnTabSelectionChangedListener(OnTabSelectionChangedListener listener)

EasyIndicator

极简的横向Tab指示器,和ViewPager结合使用,可快速实现页面切换。

  • 演示效果

TabBar - 图2

  • 使用案例
  1. <com.xuexiang.xui.widget.tabbar.EasyIndicator
  2. android:id="@+id/easy_indicator"
  3. android:layout_width="match_parent"
  4. android:layout_height="wrap_content"
  5. app:indicator_bottom_height="3dp"
  6. app:indicator_height="42dp"
  7. app:indicator_isBottom_line="true"
  8. app:indicator_textSize="14sp"
  9. app:indicator_width="0dp" />
  10. mEasyIndicator.setTabTitles(ContentPage.getPageNames());
  11. mEasyIndicator.setViewPager(mViewPager, mPagerAdapter);
  • 属性表: (EasyIndicator)
属性名类型默认值备注
indicator_widthdimension-1(MATCH_PARENT)指示器的宽度
indicator_heightdimension45px指示器的高度
indicator_textSizedimension14px指示器文字的大小
indicator_select_textSizedimension14px指示器选中时文字的大小
indicator_selected_colorcolorR.attr.colorAccent指示器选中时的背景颜色
indicator_normal_colorcolor黑色指示器未选中时的背景颜色
indicator_line_showbooleantrue是否显示底部指示器
indicator_line_heightdimension3指示器底部的高度
indicator_line_colorcolorR.attr.colorAccent指示器指示线的颜色
indicator_bottom_line_colorcolorR.attr.xui_config_color_separator_dark指示器底部指示线的颜色
indicator_bottom_line_heightdimension0指示器底部指示线的高度
indicator_vertical_line_wdimension0指示器垂直分割线的宽度
indicator_vertical_line_hdimension0指示器垂直分割线的高度
indicator_vertical_line_colorcolorR.attr.xui_config_color_separator_dark指示器垂直分割线的颜色

TabSegment

用于横向多个Tab的布局,可以灵活配置Tab的样式

  • 演示效果

TabBar - 图3

  • 使用案例
  1. <com.xuexiang.xui.widget.tabbar.TabSegment
  2. android:id="@+id/tabSegment"
  3. android:layout_width="match_parent"
  4. android:layout_height="40dp"
  5. android:background="@drawable/bg_tab_panel"/>
  6. for (String page : pages) {
  7. mTabSegment.addTab(new TabSegment.Tab(page));
  8. }
  9. mTabSegment.setupWithViewPager(mContentViewPager, false);
  10. mTabSegment.setMode(TabSegment.MODE_FIXED);
  • 属性表: (TabSegment)
属性名类型默认值备注
ts_indicator_heightdimension2dp指示器的高度
ts_has_indicatorbooleantrue是否显示指示器
android:textSizedimension16sp文字大小
ts_indicator_topbooleanfalse指示器是否在顶端
ts_modeenumfixed指示器的模式
ts_spacedimension10dptab间的空隙
ts_icon_positionenumleft图标的位置
ts_typeface_providerstring/文字的样式
ts_selected_colorcolorR.attr.colorAccenttab选中时的颜色
ts_normal_colorcolorR.color.xui_config_color_gray_5tab未选中时的颜色

VerticalTabLayout

用于纵向的多个Tab的布局,支持自定义样式,可支持消息小红点的设置。

  • 演示效果

TabBar - 图4

  • 使用案例
  1. <com.xuexiang.xui.widget.tabbar.VerticalTabLayout
  2. android:id="@+id/tab_layout0"
  3. android:layout_width="0dp"
  4. android:layout_height="match_parent"
  5. android:layout_weight="1"
  6. android:background="#369DE3"
  7. android:visibility="visible"
  8. app:vtl_indicator_color="@color/xui_config_color_white"
  9. app:vtl_tab_mode="fixed" />
  10. tabLayout2.setupWithViewPager(mViewPager);
  11. tabLayout2.setTabBadge(2, -1);
  12. tabLayout2.setTabBadge(8, -1);
  13. tabLayout2.getTabAt(3)
  14. .setBadge(new TabView.TabBadge.Builder().setBadgeGravity(Gravity.START | Gravity.TOP)
  15. .setBadgeNumber(999)
  16. .setOnDragStateChangedListener(new Badge.OnDragStateChangedListener() {
  17. @Override
  18. public void onDragStateChanged(int dragState, Badge badge, View targetView) {
  19. if (dragState == STATE_SUCCEED) {
  20. badge.setBadgeNumber(-1).stroke(0xFFFFFFFF,1,true);
  21. }
  22. }
  23. }).build());
  • 属性表: (VerticalTabLayout)
属性名类型默认值备注
vtl_indicator_colorcolorR.attr.colorAccent指示器的颜色
vtl_indicator_widthdimension3dp指示器的宽度
vtl_indicator_cornersdimension0指示器圆角角度
vtl_indicator_gravityenumleft指示器的对齐方式
vtl_tab_margindimension0tab间的空隙
vtl_tab_modeenumfixedtab的模式
vtl_tab_heightdimension-2(WRAP_CONTENT)tab的高度