使用 TabLayout

1.xml中添加布局

<android.support.design.widget.TabLayoutandroid:id="@+id/tab"android:layout_width="@dimen/x500"android:layout_height="@dimen/y100"android:layout_marginLeft="@dimen/x20"android:padding="-1dp"app:tabContentStart="0dp"app:tabGravity="fill"app:tabIndicatorColor="@color/blue_293F59"app:tabIndicatorHeight="2dp"app:tabMode="fixed"app:tabPadding="-1dp"app:tabPaddingBottom="-1dp"app:tabPaddingEnd="-1dp"app:tabPaddingStart="-1dp"app:tabPaddingTop="-1dp"app:tabSelectedTextColor="@color/blue_293F59" />

2.代码中

//文字的集合
tabTitles = new ArrayList<>();
//这里我是把需要的文字写到String 里面统一管理(可以直接tabTitles.add()标题也行)
tabTitles = Arrays.asList(getResources().getStringArray(R.array.clerk_good_count_tab));
for (int i = 0; i < tabTitles.size(); i++) {String title = tabTitles.get(i);//我喜欢引入自定义的布局View view = View.inflate(context, R.layout.tab_count_view, null);TextView titleText = view.findViewById(R.id.title);titleText.setText(title);//这里可以加入图片之类的(看自己写的自定义布局)tab.addTab(tab.newTab().setCustomView(view));
}
//如果只是单独使用 TabLayout 只需要这个监听就好
tab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {// 如果需要选中 和不选中区分颜色之类的操作 可以在下面回调方法中写@Overridepublic void onTabSelected(TabLayout.Tab tab) {//这段代码暂时没用 后面讲解AnimatorUtils animatorUtils = AnimatorUtils.getInstance();if (tab.getPosition() == 4) {animatorUtils.viewShowOrHidden((int) context.getResources().getDimension(R.dimen.y90), 1, lDate);} else {ViewGroup.LayoutParams l = lDate.getLayoutParams();final float height = l.height;if (l.height == 0) {return;}animatorUtils.viewShowOrHidden((int) height, 0, lDate);}//这里就是切换后要做的事情switch (tab.getPosition()) {case 0:break;case 1:break;default:break;}//如果需要和ViewPage 一起使用//vp.setCurrentItem(tab.getPosition());}@Overridepublic void onTabUnselected(TabLayout.Tab tab) {}@Overridepublic void onTabReselected(TabLayout.Tab tab) {}
});

//如果需要和ViewPage 一起使用

vp.addOnPageChangeListener(new Page() {@Overridepublic void onPageSelected(int position) {tabTask.getTabAt(position).select();}
});

--------------------------------- 以上使用是没什么问题了 --------------------------------

现在就要说说开发中可能遇到的问题(至少是我遇到的)

1.下划线太长,导致不美观,我们发现api里面并没有控制长度的方法

所以就需要用反射的方式来给每一个tab变相设置长度

/*** 设置tab下划线的长度*/
//最好要求一下版本
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
public void setTabLine(int left, int right) {try {Class<?> tablayout = tab.getClass();Field tabStrip = tablayout.getDeclaredField("mTabStrip");tabStrip.setAccessible(true);LinearLayout ll_tab = (LinearLayout) tabStrip.get(tab);for (int i = 0; i < ll_tab.getChildCount(); i++) {View child = ll_tab.getChildAt(i);child.setPadding(0, 0, 0, 0);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.MATCH_PARENT, 1);//修改两个tab的间距params.setMarginStart(DensityUtil.dp2px(context, left));params.setMarginEnd(DensityUtil.dp2px(context, right));child.setLayoutParams(params);child.invalidate();}} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}
}

这样设置2个tab的margin 就可以控制长度了

2.这个是我遇到的一个坑(算是坑吧)

公司需求选择到某一个tab的时候在下面显示一个界面(比如选择时间)而选择其他界面的时候就隐藏这个界面

开始开发都没什么问题,就是手贱了,觉得直接隐藏和显示的界面太生硬,于是就写了一个动画效果,

动态改变布局的高度,来慢慢显示和隐藏。

写好了也没什么问题,突然我就把动画时间延长了5秒,看看慢效果,就发现一个问题,

发现那个下标(下面的那条线)会在动画完成后才移动显示,这个不友好了

然后各种查资料,做实验,终于发现了 如果TabLayout的父布局是RelativeLayout就会有这个奇葩的问题,

<RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><android.support.design.widget.TabLayoutandroid:id="@+id/tab"android:layout_width="match_parent"android:layout_height="@dimen/y120"android:padding="-1dp"app:tabContentStart="0dp"app:tabGravity="fill"app:tabIndicatorColor="@color/blue_293F59"app:tabIndicatorHeight="2dp"app:tabMode="fixed"app:tabPadding="-1dp"app:tabPaddingBottom="-1dp"app:tabPaddingEnd="-1dp"app:tabPaddingStart="-1dp"app:tabPaddingTop="-1dp"app:tabSelectedTextColor="@color/blue_293F59" />

</RelativeLayout>

像这样就有问题 把RelativeLayout 改为LinearLayout 就没问题了。

TabLayout 的使用 更改下划线的长度,和一个奇葩的问题相关推荐

  1. html 文字 横线 自动长度,css怎么设置下划线的长度?

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. 自定义下划线.使 ...

  2. html中加长下滑线,css怎么设置下划线的长度?

    层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. 自定义下划线.使 ...

  3. html中加个有颜色横线,关于html:更改下划线颜色

    我在这里有此代码: echo"$username"; 首先,如您所见,它带有下划线(). 其次,所有文字均为红色. 那么,是否有将文本($ username)留为红色而下划线为黑的 ...

  4. Python什么是闭包、闭包特征、定义闭包传入一个数求和并输出,定义一个装饰器:打印函数运行花费的时间,定义一个类:要求:包含一个对象属性,且用_(单下划线)命名的定义一个类方法(装饰器)

    1. 闭包.闭包特征及应用 1.1 什么是闭包? 闭包就是外部函数中定义一个内部函数,内部函数引用外部函数中的变量,外部函数的返回值是内部函数; 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包 ...

  5. android 下划线指示器,修改TableLayout的下划线指示器长度

    /** * 通过反射机制 修改TableLayout 的下划线长度 */ public void setIndicator(TabLayout tabs, int leftDip, int right ...

  6. 如何自定义listview自带下划线的长度和颜色

    有时候我们的listview当中需要实现listview下划线颜色和长度的改动,怎么做呢?xml直接改: 1.在drawable下建立一个自定义的布局,我的是:list_divider.xml: &l ...

  7. 自定义TabLayout的下划线的长度

    tablayout自定义导航线的长度的问题,我见网上有两个解决方案,我用到我的项目中都没效果,自己总结了一个方案: 一:如果你的项目中没有滑动的动画需求你可以自定义tablayout'的item,自然 ...

  8. TabLayout更改下划线的宽度

    tabs.post(new Runnable() { @Override public void run() { try { //拿到tabLayout的mTabStrip属性 Field mTabS ...

  9. css伪类元素 添加 选中下划线 自定义长度

    .actived::after { content: ''; position: absolute; width: rem(49); // 边框的宽度 height: rem(6); border-r ...

最新文章

  1. 太牛了 Python期末复习总结,提高成绩必备回家过个开心年
  2. MAC安装iterm2及配置
  3. mpls企业组网怎么样?
  4. k8s的认证和service account简述
  5. 每日一题20180330-Linux
  6. db2 某个字段排序_MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序...
  7. 信息学奥赛一本通 1112:最大值和最小值的差 | OpenJudge NOI 1.9 05
  8. 计算机等级考试二级Python讲座(一)
  9. Robot Framework自动化测试(一)---第一个脚本
  10. mysql 外文翻译5000字_MySQL数据库管理外文翻译.doc
  11. Matplotlib:Legend 图例
  12. C++ 11字符数组/字符串/数字转换/字符串拼接
  13. VOIP+PSTN集成方案
  14. laravel 5.5 The page has expired due to inactivity. Please refresh and try again
  15. 汉字风格迁移篇---基于对位法的中国书法生成方法
  16. cmd 连接 远程数据库
  17. C#,数值计算,基础函数——任意位数π的数值算法源程序与数据可视化
  18. Redis Guava 布隆过滤器实现和准确率测试
  19. vm 安装unbuntu
  20. 达人评测 i510400f和锐龙5600g参数对比

热门文章

  1. 3.17 让你的小红书笔记排名更靠前的六个方法【玩赚小红书】
  2. WebAR+教育丨帮助老师课堂教学,教育展览
  3. 如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务
  4. Scratch精通之侦测的使用
  5. 与10.110.12.29mask255.255.255.224属于同一网段的主机ip地址是
  6. 【Unity】3D模型或粒子渲染在UI上层
  7. tilemap 导入unity_Unity3D中Isometric Tilemap功能实践
  8. 浅谈编程能力的培养与提高——写给编程初学者的话
  9. 服务器项目描述,项目服务器 2010 SP2 的描述
  10. Gluster升级遇到的问题