博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Android] TabLayout设置下划线(Indicator)宽度
阅读量:4700 次
发布时间:2019-06-09

本文共 2667 字,大约阅读时间需要 8 分钟。

在使用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() {            @Override            public 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的字数不固定一定用反射取mTextView                        Field 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); //修复 文本显示宽度问题}

 

本博客地址:

本文原文地址:

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

 

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

你可能感兴趣的文章
PowerDesigner导出表到word
查看>>
使用 string 的一些规则
查看>>
gnome-terminal的一些调整
查看>>
POJ 1273 Drainage Ditches
查看>>
POJ 1733 Parity game
查看>>
js晋级篇——前端内存泄漏探讨
查看>>
Drupal 出错的解决办法
查看>>
js正则
查看>>
thrift源码阅读笔记
查看>>
iOS UI基础-4.0应用程序管理
查看>>
在CentOS 6.4 x86_32中使用Rhythmbox听MP3
查看>>
sys模块
查看>>
BZOJ3073 : [Pa2011]Journeys
查看>>
BZOJ2213 : [Poi2011]Difference
查看>>
聊聊javascript的事件
查看>>
对象基础
查看>>
【MySQL比知必会】第九章 使用正则表达式进行搜索
查看>>
查看Oracle数据库名和实例名的命令
查看>>
20155302 2016-2017-2 《Java程序设计》第4周总结
查看>>
java Html 转 PDF
查看>>