在使用TabLayout的过程中,为每个标签添加一个 下划线,但发现每个下划线的 宽度 都是一样的,例如会如下显示

这样很难看,所以必须进行调整后的效果如下:

看,这样不是非常和谐啦!~~

实现方法很简单,只需要用反射重写一些 TabLayout 就行!

我这里干脆做成了一个Util类 TabLayoutUtil .java ,代码如下:

package com.jack.appnews.util;import android.support.design.widget.TabLayout;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;import java.lang.reflect.Field;/*** TabLayoutUtil 工具类*/
public class TabLayoutUtil {public static void reflex(final TabLayout tabLayout) {//了解源码得知 线的宽度是根据 tabView的宽度来设置的tabLayout.post(new Runnable() {@Overridepublic void run() {try {//拿到tabLayout的mTabStrip属性LinearLayout mTabStrip = (LinearLayout) tabLayout.getChildAt(0);int dp10 = UiUtil.dip2px(tabLayout.getContext(), 10);for (int i = 0; i < mTabStrip.getChildCount(); i++) {View tabView = mTabStrip.getChildAt(i);//拿到tabView的mTextView属性  tab的字数不固定一定用反射取mTextViewField mTextViewField = tabView.getClass().getDeclaredField("mTextView");mTextViewField.setAccessible(true);TextView mTextView = (TextView) mTextViewField.get(tabView);tabView.setPadding(0, 0, 0, 0);//因为我想要的效果是   字多宽线就多宽,所以测量mTextView的宽度int width = 0;width = mTextView.getWidth();if (width == 0) {mTextView.measure(0, 0);width = mTextView.getMeasuredWidth();}//设置tab左右间距为10dp  注意这里不能使用Padding 因为源码中线的宽度是根据 tabView的宽度来设置的LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams();params.width = width;params.leftMargin = dp10;params.rightMargin = dp10;tabView.setLayoutParams(params);tabView.invalidate();}} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}});}
}

二、如何使用

在Activity 或者 BaseFragment 文件中,初始化完 TabLayout 后,

TabLayoutUtil.reflex(tabLayout);

private void bindData() {tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);TabLayoutUtil.reflex(tabLayout); //修复 文本显示宽度问题
}

本博客地址: wukong1688

本文原文地址:https://www.cnblogs.com/wukong1688/p/10760149.html

转载请著名出处!谢谢~~

转载于:https://www.cnblogs.com/wukong1688/p/10760149.html

[Android] TabLayout设置下划线(Indicator)宽度相关推荐

  1. android自定义tab下划线变大,Android开发之设置TabLayout下方下划线的宽度

    由于最近项目需要,需要设置tabLayout下方下划线的长度.笔者上网找了半天,也没有找到方法.后来了解到在源码中对tabLayout的下划线进行了设置.并没有方法可以直接设置. 然后,笔者看到了某位 ...

  2. android按钮设置下划线,Android开发如何给textView设置下划线或中划线

    关键字:android,android开发,下划线,中划线 我们在开发应用的时候,尤其是在做商城项目的时候,需要用到原价格以及降价后的价格,这就不可避免用到中划线或者下划线,在原价格上做一个中划线,这 ...

  3. TabLayout更改下划线的宽度

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

  4. 一个工具类实现自定义Tablayout的下划线宽度

    ** 只改变Tablayout的下划线的宽度,只需要一个工具类就可以可满足** 1.写个工具类 封装: /*** @author FX* @date 2018/07/19 11:11* @fuctio ...

  5. [Android]Tablayout:修改指示器indicator的宽度

    一.问题描述: 最近接触到了Tablayout,需求是要把Tablayout的下划线宽度缩短,或者说使其可以进行自定宽度. 百度上面大多数利用反射,(具体可百度查询),这种方法确实可以把下划线变短,但 ...

  6. Tablayout动态设置下划线长度

    由于最近项目需要,需要设置tabLayout下方下划线的长度.笔者上网找了半天,也没有找到方法.后来了解到在源码中对tabLayout的下划线进行了设置.并没有方法可以直接设置. 然后,笔者看到了某位 ...

  7. android AppCompatEditText 自定义下划线颜色

    今天,就讲讲  AppCompatEditText设置下划线颜色的知识. 如下图所示: style中添加 </pre><pre name="code" cla ...

  8. Android Textview 添加下划线 方法

    Android TextView 添加下划线的简单方法 在res的values资源文件夹下,给String.xml文件添加 <string name="userlicense" ...

  9. android 下拉刷新实现方式,Android RecyclerView设置下拉刷新的实现方法

    Android RecyclerView设置下拉刷新的实现方法 1 集成 SwipeRefreshLayout 1.1 xml布局文件中使用 android:id="@+id/refresh ...

最新文章

  1. 技术开源出现“逆趋势”,中国如何下好 AI Open 这盘棋
  2. 形象理解深度学习中八大类型卷积
  3. CB Insights发布2017全球AI企业100强,出门问问、碳云智能入选
  4. notepad python_Notepad++配置Python开发环境
  5. Objective-C中@property的所有属性详解
  6. 使用DelayQueue 和 FutureTask 实现java中的缓存
  7. 美团点评Docker容器管理平台
  8. Java 读取某个目录下所有文件、文件夹
  9. Windows10:将cmd命令行添加到右键中的方法
  10. 2020年javaWeb面试题(初)
  11. 人民日报申论范文:题目考“时间”你怎么写
  12. Android SMB 简单几步实现手机给电脑传输数据
  13. 阿里云视频点播功能使用
  14. 大数据管理与分析技术(1)
  15. 本人编写的近乎全部《仙境传说》(RO)服务器工具下载 包含源代码
  16. php redis批量删除key,redis批量删除某种规则的key
  17. ccmall商城:阿里的区块链为阿里代言,可靠,安全,不可篡改
  18. [附源码]Python计算机毕业设计Django高校体育场馆管理系统
  19. win10系统如何安装微软应用商店?
  20. 数据库表结构生成图,表结构图,ER图

热门文章

  1. Facebook 为安卓用户推出精简版 Messenger Lite,率先面向发展中国家
  2. 多版本号并发控制(MVCC)在实际项目中的应用
  3. bzoj1625[Usaco2007 Dec]宝石手镯*
  4. 理解 Delphi 的类(十) - 深入方法[13] - 在 interface 区声明的方法
  5. 无线路由能当AP用吗?
  6. PHP MySQL 相关函数(上)
  7. 如何卸载IE7重装IE6
  8. python文件生成电脑exe文件
  9. 问题 L: The 3n + 1 problem
  10. 后端用的nodejs怎么打包_你怎么也想象不到,平板玻璃、玻璃瓶这些竟可以用PET塑钢带打包!...