2016-05-21 4 views
5

In meiner Anwendung arbeite ich tablayout. Alles funktioniert gut, aber ich möchte tablayout Text und Indikator Zeile sollte beide gleich groß sein.Wie gleiche Breite von Tablayout Indikator und Text

aber Indikator Breite links und rechts nehmen zusätzlichen Platz. wie man zusätzlichen Raum entfernt oder macht es beide gleiche Breite.

tun nötig

dank

+0

Post finden, was Sie 'tried' haben? – Ironman

+0

tab.setcustomview das funktioniert, aber ich bekomme ein anderes Problem. Gibt es ein natives Tag, um den Platz zu reduzieren? – Jeeva

+1

Ich möchte die Breite des Indikators reduzieren. – Jeeva

Antwort

0

i eine Lösung von 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(); 
      } 
     } 
    }); 

} 
Verwandte Themen