在使用tablayout 中 需要修改文字下方的指示器寬度
實(shí)際中原生tablayout 是沒(méi)有相關(guān)對(duì)外方法實(shí)現(xiàn)修改功能的我們需要用到反射處理
保證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{
? ? ? ? ? ? ?//拿到我們需要修改的屬性值 名字只能是這個(gè)
? ? ? ? ? ? ? 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();
? ? ? ?}
//轉(zhuǎn)換調(diào)整數(shù)值
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);
? ? ? ? //最終的方法還是使用代碼動(dòng)態(tài)的修改屬性值
? ? ? ? ?LinearLayout.LayoutParams params=newLinearLayout.LayoutParams(
? ? ? ? ? ? ? ? ? ? ? ? ? 0,LinearLayout.LayoutParams.MATCH_PARENT,1);
? ? ? ? ? params.leftMargin= left;
? ? ? ? ? params.rightMargin= right;
? ? ? ? ? child.setLayoutParams(params);
? ? ? ? ? child.invalidate();
}
}
簡(jiǎn)單來(lái)說(shuō)就是拿到關(guān)鍵屬性動(dòng)態(tài)修改值 但是還不知道適配情況怎么樣
介紹完畢 需要更專業(yè)理解的請(qǐng)查閱如下資料
http://www.reibang.com/p/581e4ea600f9