安卓资源收集Android自定义控件Android开发

Tablayout 指示器宽度调整

2017-09-01  本文已影响0人  爱吃糖的先生

在使用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.jianshu.com/p/581e4ea600f9

上一篇下一篇

猜你喜欢

热点阅读