前言:
TabLayout作為material design中重要一員,在項目中已經使用非常廣泛,TabLayout和Viewpager的綁定,十分簡單,而且TabLayout可以設置指示器顏色,高度,模式,各種參數,但是,TabLayout并沒有給我們設置指示器長度的接口或者方法,遇到需要指定指示器長度的設計,令人抓狂。
例如:
Paste_Image.png
方法:
盡管TabLayout沒有提供設置指示器長度的方法,但是辦法總比困難多,還是能找到辦法的,找到了一個可行的方法:
在Tablayout渲染之后,調用方法:
tab.post(new Runnable() {
@Override
public void run() {
setIndicator(tab,60,60);
}
});```
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);
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();
}
}```
<a ><鏈接>