Android開發 設定tablayout下劃線長度和內容保持一致
阿新 • • 發佈:2019-01-03
廢話不多說,直接看一下效果吧:
改變下劃線和內容的長度一致可以給使用者更好的體驗,在這裡主要使用反射的方式,直接上程式碼吧
public static void reflex(final TabLayout tabLayout, final int heigh) { //瞭解原始碼得知 線的寬度是根據 tabView的寬度來設定的 tabLayout.post(new Runnable() { @Override public void run() { try { //拿到tabLayout的mTabStrip屬性 LinearLayout mTabStrip = (LinearLayout) tabLayout.getChildAt(0); for (int i = 0; i < mTabStrip.getChildCount(); i++) { View tabView = mTabStrip.getChildAt(i); //拿到tabView的mTextView屬性 tab的字數不固定一定用反射取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 = DensityUtils.dp2px(heigh); params.rightMargin = DensityUtils.dp2px(heigh); tabView.setLayoutParams(params); tabView.invalidate(); } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } }); }
heigh 可以自己設定寬度 ,更好的保持下劃線長度和字型一致
希望對大家有幫助!
github地址:https://github.com/mengjie0125/MyTabDemo