Tablayout 指示器寬度調整

在使用tablayout 中 需要修改文字下方的指示器寬度

實際中原生tablayout 是沒有相關對外方法實現修改功能的我們需要用到反射處理

保證tablayout 可以使用為前提 在使用后加入下方代碼

mTabTl.post(newRunnable() {

? ? ? ? @Override

? ? ? ?public voidrun() {

? ? ? ? ? ? ? setIndicator(mTabTl,60,60);

? ? ? }

});


private voidsetIndicator(TabLayout tabs, intleftDp, intrightDp) {

? ? ? ? ?Class tabLayout = tabs.getClass();

? ? ? ? ?Field tabStrip =null;

? ? ? ? ?try{

? ? ? ? ? ? ?//拿到我們需要修改的屬性值 名字只能是這個

? ? ? ? ? ? ? tabStrip = tabLayout.getDeclaredField("mTabStrip");

? ? ? ? ?}catch(NoSuchFieldException e) {

? ? ? ? ? ? ?e.printStackTrace();

}

? ? ? ?tabStrip.setAccessible(true);

? ? ? ?LinearLayout llTab =null;

? ? ? ?try{

? ? ? ? ? / /獲取到我們需要的tablayout?

? ? ? ? ? ? llTab = (LinearLayout) tabStrip.get(tabs);

? ? ? ?}catch(IllegalAccessException e) {

? ? ? ? ? ? ?e.printStackTrace();

? ? ? ?}

//轉換調整數值

intleft = (int) TypedValue.applyDimension(

? ? ? ? ? ?TypedValue.COMPLEX_UNIT_DIP,leftDp,Resources.getSystem().getDisplayMetrics());

? ? ?intright = (int) TypedValue.applyDimension(

? ? ? ? ? ?TypedValue.COMPLEX_UNIT_DIP,rightDp,Resources.getSystem().getDisplayMetrics());

? ? ?for(inti =0;i < llTab.getChildCount();i++) {

? ? ? ? ? View child = llTab.getChildAt(i);

? ? ? ? ? child.setPadding(0,0,0,0);

? ? ? ? //最終的方法還是使用代碼動態的修改屬性值

? ? ? ? ?LinearLayout.LayoutParams params=newLinearLayout.LayoutParams(

? ? ? ? ? ? ? ? ? ? ? ? ? 0,LinearLayout.LayoutParams.MATCH_PARENT,1);

? ? ? ? ? params.leftMargin= left;

? ? ? ? ? params.rightMargin= right;

? ? ? ? ? child.setLayoutParams(params);

? ? ? ? ? child.invalidate();

}

}

簡單來說就是拿到關鍵屬性動態修改值 但是還不知道適配情況怎么樣

介紹完畢 需要更專業理解的請查閱如下資料

http://www.lxweimin.com/p/581e4ea600f9

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容