精华内容
下载资源
问答
  • TabLayout和Viewpager 的使用并自由修改 TabLayout 下划线长度
  • Tablayout动态设置下划线长度

    千次阅读 2017-07-28 09:14:39
    由于最近项目需要,需要设置tabLayout下方下划线长度.笔者上网找了半天,也没有找到方法.后来了解到在源码中对tabLayout的下划线进行了设置.并没有方法可以直接设置. 然后,笔者看到了某位大神的代码,利用反射修改...

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

    public void setIndicator (TabLayout tabs,int leftDip,int rightDip){  
           Class<?> tabLayout = tabs.getClass();  
           Field tabStrip = null;  
           try {  
           //通过反射得到tablayout的下划线的Field
               tabStrip = tabLayout.getDeclaredField("mTabStrip");  
           } catch (NoSuchFieldException e) {  
               e.printStackTrace();  
           }  
      
           tabStrip.setAccessible(true);  
           LinearLayout llTab = null;  
           try {  
           //得到承载下划线的LinearLayout   //源码可以看到SlidingTabStrip继承得到承载下划线的LinearLayout
               llTab = (LinearLayout) tabStrip.get(tabs);  
           } catch (IllegalAccessException e) {  
               e.printStackTrace();  
           }  
            
           int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, leftDip, Resources.getSystem().getDisplayMetrics());  
           int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 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();  
           }

    由于水平太臭,就不多解释了... 至于使用方式的话,直接调用方法即可.必须要在Tablayout渲染出来后调用,我们可以选择view.post()方法来实现:

    tab.post(new Runnable() {  
               @Override  
               public void run() {  
                   setIndicator(tab,60,60);  
               }  
           });  
           //如果你已经初始化了tablayout的话,那么直接调用setIndicator(tab,60,60); //60的值是我自己定义的,你可以根据自己来定义

    下面来看一下效果


    image

    展开全文
  • 如何让文字下面的线(border-bottom) 和 文字的长度一致! 答: 给父盒子设置display:inline-block

    如何让文字下面的线(border-bottom) 和 文字的长度一致!

     

     

     

    答: 给父盒子设置display:inline-block

    展开全文
  • 利用反射获取到tablayout的mTabStrip,进行设置:代码如下: public static void setTabMargin(TabLayout tabs, int leftDip, int rightDip) { Class<?> tabLayout = tabs.getClass(); Field tabStrip = null;

    方法一反射设置

    利用反射获取到tablayout的mTabStrip,进行设置:

    很多人反馈原来的方法失效了,
    sdk 28的Tablayout 的源码发生了变化。修改如下:

    public void setIndicatorWidth(@NonNull final TabLayout tabLayout, final int margin) {
            tabLayout.post(new Runnable() {
                @Override
                public void run() {
                    try {
                        // 拿到tabLayout的slidingTabIndicator属性
                        Field slidingTabIndicatorField = tabLayout.getClass().getDeclaredField("slidingTabIndicator");
                        slidingTabIndicatorField.setAccessible(true);
                        LinearLayout mTabStrip = (LinearLayout) slidingTabIndicatorField.get(tabLayout);
                        for (int i = 0; i < mTabStrip.getChildCount(); i++) {
                            View tabView = mTabStrip.getChildAt(i);
                            //拿到tabView的mTextView属性
                            Field textViewField = tabView.getClass().getDeclaredField("textView");
                            textViewField.setAccessible(true);
                            TextView mTextView = (TextView) textViewField.get(tabView);
                            tabView.setPadding(0, 0, 0, 0);
                            // 因为想要的效果是字多宽线就多宽,所以测量mTextView的宽度
                            int width = mTextView.getWidth();
                            if (width == 0) {
                                mTextView.measure(0, 0);
                                width = mTextView.getMeasuredWidth();
                            }
                            // 设置tab左右间距,注意这里不能使用Padding,因为源码中线的宽度是根据tabView的宽度来设置的
                            LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams();
                            params.width = width;
                            params.leftMargin = margin;
                            params.rightMargin = margin;
                            tabView.setLayoutParams(params);
                            tabView.invalidate();
                        }
                    } catch (NoSuchFieldException e) {
                        e.printStackTrace();
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            });
        }
    

    28版本去除水波纹:

    app:tabBackground="@null"
    app:tabRippleColor="@null"
    

    然而有些人会遇到空指针

    tabStrip = tabLayout.getDeclaredField(&quot;mTabStrip&quot;);
    

    这句代码取不到值,这是因为混淆的时候把tablayout给混淆了。

    在混淆里面加入这句即可。

    -keep class android.support.design.widget.TabLayout{*;}
    

    这种方法的问题是利用反射实现的,等sdk更新之后,这方法还可能失效。而且tablayout的下划线长度不能太短,margin也影响到了tab标题的宽度,margin设置太大,文字都放不下了。

    二,sdk 28+,直接设置文字下划线等宽

    在sdk>=28中,如果你的需求恰好是下划线和文字等宽,那么你可以最简单轻松地实现这一功能。

    在xml的tablayout标签加上这一句代码就完事了。

     app:tabIndicatorFullWidth="false"
    

    **

    三、自定义Indicator 样式(推荐)

    **

    Indicator 是允许我们设置 drawable 来自定义样式的,我们可以在透明的背景里面包裹一个你需求宽度的shape,就可以实现这一功能,而且Indicator 的样式更加丰富多样。

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">   
        <item android:gravity="center">     
          <shape>
                <size
                    android:width="20dp"
                    android:height="5dp" />
    
                <corners android:radius="5dp" />
                <solid android:color="@color/blue" />
    
            </shape>
        </item>
    
    </layer-list>
    

    然后xml的tablayout加入就好了

    app:tabIndicator="@drawable/tab_indicator"
    

    需要注意的是,你原来设置的如果有tabIndicatorcolor 属性,你shape中的填充色不会生效,需要设置统一,或者去掉一个就好了。

    展开全文
  • 设置tablayout下划线长度

    千次阅读 2019-08-26 11:19:01
    写一个java方法,直接复制下面的代码就可以用 public static void setIndicator(TabLayout tabs, int leftDip, int rightDip) { Class<?> tabLayout = tabs.getClass(); Field tabStrip = null;...

    随着字的宽而改变的
    app:tabIndicatorFullWidth=“false”

    另一种:

    Xml 文件

       <android.support.design.widget.TabLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/dp_50"
        app:tabIndicatorFullWidth="false"
        app:tabMaxWidth="200dp"
        app:tabMinWidth="20dp"
        app:tabPaddingEnd="5dp"
        app:tabPaddingStart="8dp"
        app:tabSelectedTextColor="@color/colore735"
        app:tabTextAppearance="@style/TabTextSizi"
        app:tabTextColor="@color/color333" />
    `
    
    <style name="TabTextSizi" parent="TabTextSizi" tools:ignore="ResourceCycle">
        <item name="android:textSize">16sp</item>
    </style>
    

    写一个java方法,复制下面的代码就可以用了

       public static void setIndicator(TabLayout tabs, int leftDip, int rightDip) {
        Class<?> tabLayout = tabs.getClass();
        Field tabStrip = null;
        try {
            tabStrip = tabLayout.getDeclaredField("slidingTabIndicator");
        } 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, leftDip, Resources.getSystem().getDisplayMetrics());
        int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 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();
        }
        
        
    }  
    

    需要用的时候,在tablayout的地方调用就可以了

         setIndicator(mInfoTabLayoiut,6,6);
    
    展开全文
  • 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言...下划线长度通过设置空内容的width属性来实现,还可以...
  • 注意 最新的TabLayout 下划线 mTabStrip 改为slidingTabIndicator public static void setIndicator(TabLayout tabs, int leftDip, int rightDip) { Class&lt;?&gt; tabLayout = tabs.getClass(); Field ...
  • Android开发 设置tablayout下划线长度和内容保持一致

    千次阅读 热门讨论 2017-11-24 15:28:47
    改变下划线和内容的长度一致可以给用户更好的体验,在这里主要使用反射的方式,直接上代码吧 public static void reflex(final TabLayout tabLayout, final int heigh) { //了解源码得知 线的宽度是根据 tabView...
  • * 修改TabLayout的下划线长度 * 单位px */ public static void setIndicator(TabLayout tabs, int textSize) { Paint paint = new Paint(); paint.setTextSize(textSize); float textWidth = paint....
  • 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言...下划线长度通过设置空内容的width属性来实现,还可以...
  • tablayout下划线长度

    千次阅读 2019-05-30 16:27:24
    * 通过反射{@link TabLayout}设置下划线(Indicator)宽度,字多宽线就多宽,参阅 https://blog.csdn.net/waplyj/article/details/81068127 */ public static void setTabLayoutIndicator(final TabLayout ...
  • 二、需求:word中的下划线/横线,长度固定,不随着内容增减而变化 三、思路:通过表格来实现 四、实现 1、在word中插入所需规格的表格 2、在横线上(表格中)填写所需的内容 3、去除(隐藏)表格中多余的...
  • 因需求需要改变TabLayout下划线的宽度,在网上查找的方法设置后没有效果,最后查看源码发现API28版本后mTabStrip被更改为slidingTabIndicator、mTextView被更改为textView。将这两个替换后,就可以实现下划线宽度与...
  • Tablayout自定义下划线长度

    千次阅读 2018-04-09 16:25:19
    最近接到一个任务,就是要修改原来用的官方support包TabLayout中的指示器线宽,改成固定值,当然网上有什么反射加padding什么的,可是治标不治本,切Tab过渡动画也加不了,什么?你告诉我github又xxx类似控件,可是...
  • 我们在使用Tablayout选项卡控件的时候经常要根据项目需求做一些改动,比如如何使Tablayout内容和下划线长度相同,类似头条选项卡那种。通常我们的策略是通过反射的机制去改变Tabview的长度。下面直接贴代码: ...
  • 样式以及效果图: float: left;这个属性根据自己是否需要添加 <span style=" border-bottom: 1px solid black; height: 25px; float: left; width: 150px;">{{item.value}}</span>
  • 当我美滋滋的使用CSS修饰下划线的时候,问题又出现了。我修饰的下划线效果把上面的文字同样修饰了。 后来陆陆续续又弄了几种方法,效果都不是很理想。 最后想到了一种。把自己想要文字的长度用括起来,比如上图的...
  • 如题,#nav li a:hover{ border-bottom: 5px solid ...就是说我想自己指定下划线长度,试了padding和margin只能调间距,下划线长度始终等于文字长度,请教怎么实现?PS:常规方法吧,用ul和li的,其他另类方法暂不考虑
  • Android自带TabLayout在SDK28后可以设置下方下划线更随字体长度变化了!就再也不需要反射,不用下面繁琐的操作了,只需要在布局文件使用这个属性就好了。设置为false后就会根据字体长度变化。app:...
  • ![图片说明](https://img-ask.csdn.net/upload/201608/02/1470134737_686217.png) 。求指引
  • ![图片说明](https://img-ask.csdn.net/upload/201706/09/1496975401_850897.png)
  • 在api中只能设置下划线的高度和颜色 我想让tablayout的横线指示器长度跟随textview的长度 求方法
  • 具体结构如下(el-table->el-table-column): 显示如下: 经查,发现是代码写的不够严谨,导致后面出现了空隙(感觉不够一个空格),把代码写成这样就好了: 另外,如果用原生html加css来写,对代码格式......
  • 设置TabHost中的Tab标签大小,字体的颜色,下划线长度,使Tab之间可以有间隔
  • js判断text中有没有下划线,同时判断出下划线长度,同时创建出一个input控件的长度下划线长度相同
  • 自定义TabLayout的下划线长度

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

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 120,875
精华内容 48,350
关键字:

如何设置下划线的长度