/**
* 通过反射机制 修改TableLayout 的下划线长度
*/
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);
//获得tabview
LinearLayout llTab = null;
try {
llTab = (LinearLayout) tabStrip.get(tabs);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//设置tabView的padding为0,并且设置了margin
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();
}
}调用
//设置下划线长度
homeFragment_tab.post(new Runnable() {
@Override
public void run() {
setIndicator(homeFragment_tab,60,60);
}
});
这个方法不是很好 是强行挤压tab大小 而且不能 随手机分辨率改变,只能定死
版权声明:本文为qq_40567164原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。