2016-05-21 28 views
5

W mojej aplikacji pracuję tablayout. wszystko działa poprawnie, ale chcę, aby tekst tablayout i linia wskaźnika miały taki sam rozmiar.Jak zrobić tę samą szerokość wskaźnika Tablayout i tekstu

, ale szerokość wskaźnika w lewo i w prawo powoduje dodatkowe miejsce. jak usunąć dodatkową przestrzeń lub uczynić ją równą szerokości.

zrobić potrzebne

dzięki

+0

postu co masz 'tried'? – Ironman

+0

tab.setcustomview to działa, ale mam inny problem. czy istnieje natywny tag do zmniejszenia przestrzeni. – Jeeva

+1

Chcę zmniejszyć szerokość wskaźnika. – Jeeva

Odpowiedz

0

i znaleźć rozwiązanie z http://blog.csdn.net/u013134391/article/details/70833903

public void reflex(final TabLayout tabLayout){ 
    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       LinearLayout mTabStrip = (LinearLayout) tabLayout.getChildAt(0); 

       int dp10 = dip2px(tabLayout.getContext(), 10); 

       for (int i = 0; i < mTabStrip.getChildCount(); i++) { 
        View tabView = mTabStrip.getChildAt(i); 


        Field mTextViewField = tabView.getClass().getDeclaredField("mTextView"); 
        mTextViewField.setAccessible(true); 

        TextView mTextView = (TextView) mTextViewField.get(tabView); 

        tabView.setPadding(0, 0, 0, 0); 

        int width = 0; 
        width = mTextView.getWidth(); 
        if (width == 0) { 
         mTextView.measure(0, 0); 
         width = mTextView.getMeasuredWidth(); 
        } 


        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams(); 
        params.width = width ; 
        params.leftMargin = dp10; 
        params.rightMargin = dp10; 
        tabView.setLayoutParams(params); 

        tabView.invalidate(); 
       } 

      } catch (NoSuchFieldException e) { 
       e.printStackTrace(); 
      } catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } 
     } 
    }); 

}