其实我们大多时候是这两个需求,一个自带的属性就搞定,还有就是自定义(根据TabLayout的版本来决定写法)

1.app:tabIndicatorFullWidth="false",ture是第一个红箭头,false是第二个。
想要修改指示器的样式,直接在代码中修改:
tabThree.setSelectedTabIndicator(getResources().getDrawable(R.drawable.line));

2.下面是自定义的写法的一种:

下面是activity中的写法:

public void setIndicator(TabLayout tabs, int leftDip, int rightDip) {Class<?> tabLayout = tabs.getClass();Field tabStrip = null;try {tabStrip = tabLayout.getDeclaredField("mTabStrip");} catch (NoSuchFieldException e) {e.printStackTrace();}tabStrip.setAccessible(true);LinearLayout llTab = null;try {llTab = (LinearLayout) tabStrip.get(tabs);} catch (IllegalAccessException e) {e.printStackTrace();}int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip2px(leftDip), Resources.getSystem().getDisplayMetrics());int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip2px(rightDip), Resources.getSystem().getDisplayMetrics());for (int i = 0; i < llTab.getChildCount(); i++) {View child = llTab.getChildAt(i);child.setPadding(0, 0, 0, 0);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1);params.leftMargin = left;params.rightMargin = right;child.setLayoutParams(params);child.invalidate();}}/*** dp转px**/public int dip2px(int dipValue) {float reSize = getActivity().getResources().getDisplayMetrics().density;return (int) ((dipValue * reSize) + 0.5);}

调用方法:

  tabLive.post(new Runnable() {@Overridepublic void run() {
//                setIndicator(tabLive,5,5);
//                SetIndicator.setIndicator(tabLive,5,5);}});

下面是封装的类:

import android.content.res.Resources;
import android.support.design.widget.TabLayout;
import android.util.TypedValue;
import android.view.View;
import android.widget.LinearLayout;import java.lang.reflect.Field;import static com.southsummer.goddessplan.utils.AppUtils.getResources;/*** tabLayout设置指示器长度*/
public class SetIndicator {public static void setIndicator(TabLayout tabs, int leftDip, int rightDip) {Class<?> tabLayout = tabs.getClass();Field tabStrip = null;try {tabStrip = tabLayout.getDeclaredField("mTabStrip");} catch (NoSuchFieldException e) {e.printStackTrace();}tabStrip.setAccessible(true);LinearLayout llTab = null;try {llTab = (LinearLayout) tabStrip.get(tabs);} catch (IllegalAccessException e) {e.printStackTrace();}int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip2px(leftDip), Resources.getSystem().getDisplayMetrics());int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip2px(rightDip), Resources.getSystem().getDisplayMetrics());for (int i = 0; i < llTab.getChildCount(); i++) {View child = llTab.getChildAt(i);child.setPadding(0, 0, 0, 0);LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1);params.leftMargin = left;params.rightMargin = right;child.setLayoutParams(params);child.invalidate();}}/*** dp转px**/public static int dip2px(int dipValue) {float reSize = getResources().getDisplayMetrics().density;return (int) ((dipValue * reSize) + 0.5);}
}

Android Tablayout 指示器长度修改相关推荐

  1. Android TabLayout修改指示器宽度方案汇总

    目录 前言 TabLayout的视图结构 TabLayout绘制指示器的过程 1.从获取tabSelectedIndicator边界着手 1.1 默认情况下的指示器宽度 1.2 tabIndicato ...

  2. Android TabLayout基本使用及完美调整指示器位置的技巧

    在应用中,我们经常遇到多个页签切换的需求,这个时候往往使用viewPager+TabLayout实现,但官方的TabLayout使用时往往不满足我们的需求,例如不能修改指示器长度的问题,本文利用巧妙的 ...

  3. 安卓Tablayout自定义文字、指示器长度和颜色

    安卓Tablayout自定义文字.指示器长度和颜色 废话不多说,先上效果图.没有效果图的文章都是扯淡: 安卓Tablayout自定义文字.指示器长度和颜色 新的改变 以上就是所有的代码 附上demo源 ...

  4. AppBarLayout中的Android TabLayout

    In this tutorial, we'll discuss and implement Android TabLayout in our android application. Also we' ...

  5. Android ViewPager指示器

    一个values文件 attrs_universal_indicator.xml文件 <?xml version="1.0" encoding="utf-8&quo ...

  6. Android TabLayout和ViewPager

    In this tutorial we'll be implementing a ViewPager under the TabLayout that we'd already implemented ...

  7. Android TabLayout总结

    文章目录 Android TabLayout总结 基本使用 添加图标.隐藏下划线 自定义下划线.添加分割线 设置角标 圆角样式 自定义View+Lottile 代码下载 Android TabLayo ...

  8. android进度指示器_等待的痛苦—浏览进度指示器地狱的7个级别

    android进度指示器 by Mike Zetlow 由Mike Zetlow 等待的痛苦-浏览进度指示器地狱的7个级别 (The Pain of Waiting - Navigating the ...

  9. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

最新文章

  1. 【redis】redis持久化
  2. kafka 集群_10分钟搭建单机Kafka集群
  3. 工作184:自定义事件
  4. 修改了模板文件tpl如何立即生效_Views视图与模板
  5. Java中complex怎么被调用_java中存在三种调用机制
  6. 66Linux主机名和hosts67网络配置小结
  7. 上线随想之2011-03-26
  8. php实现无限极分类算法,php实现无限极分类
  9. 使用javascript实现点击复制到剪贴板
  10. C语言:输出100以内的素数
  11. RabbitMQ 快速入门指南
  12. Python统计学11——分位数回归
  13. 如何拿下最适合晚上睡不着看的网站?建议收藏!
  14. 虚拟汽车加油问题 (贪心算法)
  15. Reflector反编译.NET文件后修复
  16. pve安装黑群晖直通硬盘_PVE系列二:安装黑群晖DSM系统
  17. 知足知不足 有为有不为
  18. arcgis数据量大显示慢_百万量级矢量数据加载对比实验,Arcgis VS LSV专业版
  19. Conmi的正确答案——米家定时模块的使用以及showOnTimerType、showOffTimerType、showPeriodTimerType、identify的陷阱
  20. python蒙特卡洛算法模拟赌博模型

热门文章

  1. iOS开发之iOS10简单适配
  2. 【SW7203】智融新料号SW7203,支持1-4S,双向升降压,路径管理,可搭配SW2303,实现车充、移动电源100W
  3. KVM内核文档阅读笔记
  4. 量化进阶——为何需要进行量化对冲
  5. 70-webApp打包:将网站利用hbuilder打包为安卓app
  6. 服务注册与发现(下)
  7. linux bash环境下面给expect脚本传递参数
  8. 北大双杰——孔庆东和余杰
  9. 微型计算机 介绍 gtx980m,NVIDIA GTX 980M和GTX 1060游戏本谁更值得买?GTX 980M/1060M性能对比评测...
  10. ReLU函数 Vs Sigmoid 函数——XOR问题究竟用那个好