TabLayout 标签布局
谷歌在Material Design中推出TabLayout以替代开源库PagerSlidingTabStrip和ViewPagerIndicator的使用。事实上,这类indicator指示器的布局可谓是Android中最常见的布局设计了,TabLayout的出现给我们带来一定便利,它的使用对开发者更加友好,并且和Toolbar一样,配合material design的其他控件使用能轻易创造出酷炫的效果。
关联点
主要讲下继承,默认样式,api等等
继承
从继承关系我们可以看到TabLayout直接继承HorizontalScrollView,所以TabLayout只支持横向的滚动
默认样式
app:theme=”@style/Widget.Design.TabLayout”
从系统定义的该样式继续深入:
<style name="Widget.Design.TabLayout" parent="Base.Widget.Design.TabLayout">
<item name="tabGravity">fill</item>
<item name="tabMode">fixed</item>
</style>
<style name="Base.Widget.Design.TabLayout" parent="android:Widget">
<item name="tabMaxWidth">264dp</item>
<item name="tabIndicatorColor">?attr/colorAccent</item>
<item name="tabIndicatorHeight">2dp</item>
<item name="tabPaddingStart">12dp</item>
<item name="tabPaddingEnd">12dp</item>
<item name="tabBackground">?attr/selectableItemBackground</item>
<item name="tabTextAppearance">@style/TextAppearance.Design.Tab</item>
<item name="tabSelectedTextColor">?android:textColorPrimary</item>
</style>
接着,看看系统定义Tab文本的样式(注意textAllcaps这个属性):
<style name="TextAppearance.Design.Tab" parent="TextAppearance.AppCompat.Button">
<item name="android:textSize">14dp</item>
<item name="android:textColor">?android:textColorSecondary</item>
<item name="textAllCaps">true</item>
</style>
>
从系统定义TabLayout的默认样式可以看出,我们可以改变TabLayout对应的系统样式的属性值来适配我们自己的需求.
属性及api
app:tabMinWidth Tab的最小宽度
app:tabMaxWidth Tab的最大宽度
app:tabMode Tab模式,默认是fixed:固定的,标签很多时候会被挤压,不能滑动
app:tabGravity "center"//居中,如果是"fill",则是填充满
app:tabContentStart TabLayout左边位置的偏移量
app:tabPadding Tab内部的子控件的Padding
app:tabPaddingStart 左
app:tabPaddingEnd 右
app:tabPaddingTop 上
app:tabPaddingBottom 下
app:paddingStart 整个TabLayout的左Padding
app:paddingEnd 整个TabLayout的右Padding
app:tabTextColor Tab未被选中字体的颜色
app:tabTextAppearance Tab中文字的样式
app:tabSelectedTextColor Tab被选中字体的颜色
app:tabIndicatorColor Tab指示器下标的颜色
app:tabIndicatorHeight Tab指示器下标的高度
addTab(TabLayout.Tab tab, int position, boolean setSelected) 增加选项卡到 layout 中
addTab(TabLayout.Tab tab, boolean setSelected) 同上
addTab(TabLayout.Tab tab) 同上
getTabAt(int index) 获到选项卡
getTabCount() 获到选项卡的总个数
getTabGravity() 获到tab的 Gravity
getTabMode() 获到tab的模式
getTabTextColors() 获到tab中文本的颜色
newTab() 新建个tab
removeAllTabs() 移除所有的tab
removeTab(TabLayout.Tab tab) 移除指定的tab
removeTabAt(int position) 移除指定位置的tab
setCustomView(View )
setOnTabSelectedListener(TabLayout.OnTabSelectedListener onTabSelectedListener) 为每个 tab 增加选择监听器
setScrollPosition(int position, float positionOffset, boolean updateSelectedText) 设置滚动位置
setTabGravity(int gravity) 设置 Gravity
setTabMode(int mode) 设置 Mode,有两种值:TabLayout.MODE_SCROLLABLE和TabLayout.MODE_FIXED分别表示当tab的内容超过屏幕宽度是否支持横向水平滑动,第一种支持滑动,第二种不支持,默认不支持水平滑动。
setTabTextColors(ColorStateList textColor) 设置tab中文本的颜色
setTabTextColors(int normalColo