使用TabLayout,但是 tabMode="scrollable"
時铛纬,兩個tab之間的間距太開了厌均,實(shí)在不美觀,看TabLayout
源碼告唆,原來是設(shè)置了最小間距導(dǎo)致的:
this.scrollableTabMinWidth = res.getDimensionPixelSize(dimen.design_tab_scrollable_min_width);
<dimen name="design_tab_scrollable_min_width">72dp</dimen>
ui工程師要求是47dp棺弊,于是通過反射的方法改變這個值就可以了:
public class MyTabLayout extends TabLayout {
// 一屏顯示多少個tab
private static final int TabViewNumber = 8;
// support 低版本可能不一樣
private static final String SCROLLABLE_TAB_MIN_WIDTH = "scrollableTabMinWidth";
public MyTabLayout(Context context) {
super(context);
initTabMinWidth();
}
public MyTabLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initTabMinWidth();
}
public MyTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initTabMinWidth();
}
private void initTabMinWidth() {
// int screenWidth = getResources().getDisplayMetrics().widthPixels;
// int tabMinWidth = screenWidth / TabViewNumber;
// scrollable模式時,tab的最小寬度
int tabMinWidth = (int) getResources().getDimension(R.dimen.dp_47);
Field field;
try {
field = TabLayout.class.getDeclaredField(SCROLLABLE_TAB_MIN_WIDTH);
field.setAccessible(true);
field.set(this, tabMinWidth);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
注意:
- 這里是基于
com.android.support:design:28.0.0
擒悬,低版本字段名可能不一樣 - 注意添加混淆
## 不混淆 TabLayout
-keepclasseswithmembernames class android.support.design.widget.TabLayout {
*;
}
參考資料:https://blog.csdn.net/wanglaohushiwo/article/details/72857691