设置tablayout下划线的宽度
2017-07-27 17:00
459 查看
package com.kjt.app.activity.myaccount.MyNewStoreTemplate; import android.content.res.Resources; import android.support.design.widget.TabLayout; import android.util.TypedValue; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import java.lang.reflect.Field; /** * Created by xiayujia on 2017/6/20. */ public class TabLayoutIndicator { /** * 修改tablayout宽度 * @param tabs * @param leftDip * @param rightDip */ 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, 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(); } } public static void setIndicator(TabLayout tabLayout) { try { //拿到tabLayout的mTabStrip属性 Field mTabStripField = tabLayout.getClass().getDeclaredField("mTabStrip"); mTabStripField.setAccessible(true); LinearLayout mTabStrip = (LinearLayout) mTabStripField.get(tabLayout); // int dp10 = SM.dip2px(getContext(), 10); for (int i = 0; i < mTabStrip.getChildCount(); i++) { View tabView = mTabStrip.getChildAt(i); //拿到tabView的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 = 57; params.rightMargin = 57; tabView.setLayoutParams(params); tabView.invalidate(); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }
相关文章推荐
- TabLayout设置下划线宽度
- TabLayout设置下划线(Indicator)宽度
- 设置TabLayout下划线的宽度
- Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换
- Android-TabLayout设置内容宽度以及下划线宽度
- 设置TabLayout下划线的宽度
- Tablayout设置下划线宽度以及遇到空指针问题。
- TabLayout设置TabView宽度、下划线宽度和字体大小
- Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换
- 设置tablayout下划线的宽度
- Android中Tablayout设置下划线宽度 和 dp和px之间进行相互转换
- [置顶] Android开发之设置TabLayout下方下划线的宽度
- TabLayout设置下划线(Indicator)宽度
- TabLayout设置指示器的宽度
- Android开发 设置tablayout下划线长度和内容保持一致
- TabLayout中下划线宽度的更改
- 在写Tablayout时候,发现不能设置下划线的长度,使用反射的方式,修改了长度
- 代码动态设置tabLayout 导航条宽度
- 设置tablayout下划线长度的方法
- Android--使用反射修改TabLayout下划线宽度