TabLayout 的使用 更改下划线的长度,和一个奇葩的问题
使用 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 的使用 更改下划线的长度,和一个奇葩的问题相关推荐
- html 文字 横线 自动长度,css怎么设置下划线的长度?
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. 自定义下划线.使 ...
- html中加长下滑线,css怎么设置下划线的长度?
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言. 自定义下划线.使 ...
- html中加个有颜色横线,关于html:更改下划线颜色
我在这里有此代码: echo"$username"; 首先,如您所见,它带有下划线(). 其次,所有文字均为红色. 那么,是否有将文本($ username)留为红色而下划线为黑的 ...
- Python什么是闭包、闭包特征、定义闭包传入一个数求和并输出,定义一个装饰器:打印函数运行花费的时间,定义一个类:要求:包含一个对象属性,且用_(单下划线)命名的定义一个类方法(装饰器)
1. 闭包.闭包特征及应用 1.1 什么是闭包? 闭包就是外部函数中定义一个内部函数,内部函数引用外部函数中的变量,外部函数的返回值是内部函数; 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包 ...
- android 下划线指示器,修改TableLayout的下划线指示器长度
/** * 通过反射机制 修改TableLayout 的下划线长度 */ public void setIndicator(TabLayout tabs, int leftDip, int right ...
- 如何自定义listview自带下划线的长度和颜色
有时候我们的listview当中需要实现listview下划线颜色和长度的改动,怎么做呢?xml直接改: 1.在drawable下建立一个自定义的布局,我的是:list_divider.xml: &l ...
- 自定义TabLayout的下划线的长度
tablayout自定义导航线的长度的问题,我见网上有两个解决方案,我用到我的项目中都没效果,自己总结了一个方案: 一:如果你的项目中没有滑动的动画需求你可以自定义tablayout'的item,自然 ...
- TabLayout更改下划线的宽度
tabs.post(new Runnable() { @Override public void run() { try { //拿到tabLayout的mTabStrip属性 Field mTabS ...
- css伪类元素 添加 选中下划线 自定义长度
.actived::after { content: ''; position: absolute; width: rem(49); // 边框的宽度 height: rem(6); border-r ...
最新文章
- 太牛了 Python期末复习总结,提高成绩必备回家过个开心年
- MAC安装iterm2及配置
- mpls企业组网怎么样?
- k8s的认证和service account简述
- 每日一题20180330-Linux
- db2 某个字段排序_MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序...
- 信息学奥赛一本通 1112:最大值和最小值的差 | OpenJudge NOI 1.9 05
- 计算机等级考试二级Python讲座(一)
- Robot Framework自动化测试(一)---第一个脚本
- mysql 外文翻译5000字_MySQL数据库管理外文翻译.doc
- Matplotlib:Legend 图例
- C++ 11字符数组/字符串/数字转换/字符串拼接
- VOIP+PSTN集成方案
- laravel 5.5 The page has expired due to inactivity. Please refresh and try again
- 汉字风格迁移篇---基于对位法的中国书法生成方法
- cmd 连接 远程数据库
- C#,数值计算,基础函数——任意位数π的数值算法源程序与数据可视化
- Redis Guava 布隆过滤器实现和准确率测试
- vm 安装unbuntu
- 达人评测 i510400f和锐龙5600g参数对比
热门文章
- 3.17 让你的小红书笔记排名更靠前的六个方法【玩赚小红书】
- WebAR+教育丨帮助老师课堂教学,教育展览
- 如何在 Ubuntu 和其他 Linux 发行版中启动、停止和重启服务
- Scratch精通之侦测的使用
- 与10.110.12.29mask255.255.255.224属于同一网段的主机ip地址是
- 【Unity】3D模型或粒子渲染在UI上层
- tilemap 导入unity_Unity3D中Isometric Tilemap功能实践
- 浅谈编程能力的培养与提高——写给编程初学者的话
- 服务器项目描述,项目服务器 2010 SP2 的描述
- Gluster升级遇到的问题