2016-04-11 23 views
9

TabLayout'taki sekmeler arasında kenar boşluğu eklemenin bir yolu var mı? Widget.Design.TabLayout için özel bir stil kullanmayı denedim, ancak yalnızca dolguyla ilgili özellikler var, ancak kenar boşlukları yok.TabLayout'ta sekmeler arasında kenar boşluğu nasıl eklenir?

+1

marjı ne anlama gelir? –

+0

Evet, tam olarak –

+0

Marj ekleme ekliyor gerçekten mümkün değil, ancak bunu yapmak için bazı hileler yapabilirsiniz. b kukla görünüm veya sekmeler ekleyebilir. –

cevap

22

Tamam arkadaşlar, 2-3 saat geçirdikten sonra sonunda bir çözüm buldum.

TabLayout kullanıyorsanız, sekmeleri kullanarak stilleri ve benzeri kullanarak kenar boşluk eklemenin bir yolu yoktur. (Eskiden Android ile yaşam kurma)

Ancak, bunu Java kodu yazarak yapabilirsiniz. tüm kodunda Bütün bu benzer görünmelidir:

  for(int i=0; i < mTabLayout.getTabCount(); i++) { 
       View tab = ((ViewGroup) mTabLayout.getChildAt(0)).getChildAt(i); 
       ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) tab.getLayoutParams(); 
       p.setMargins(0, 0, 50, 0); 
       tab.requestLayout(); 
      } 

öncelikle bulundukları kabı almak zorunda Görünüm olarak her sekmeyi almak için. Bu durumda, TabLayout, sekmeler için bir kapsayıcı olarak SlidingTabStrip kullanıyor. SlidingTabStrip TabLayout ilk çocuğu olan:

View tab = ((ViewGroup) mTabLayout.getChildAt(0)) 

Ve bu küçük ayrıntı sonra, her şey oldukça yalındır.

+0

Bu çok doğru! – Kammaar

+0

Çözümünüz benim için gerçekten iyi çalışıyor! Birisi dimens.xml dosyasında bulunan bir marjı eklemek istiyorsa, "50" gibi sabit bir piksel değeri yerine getResources(). GetDimensionPixelSize (R.dimen.your_dimens) kullanabilir. –

+1

Bu çalışır, ancak alt çizgi göstergesi bunu yaptığınızda yanlış davranmaya başlar, hızlıca kaydırma çalışır, ancak sekmede belirli bir noktaya çağrıyı tıklatır. Şimdi bir çözüm arıyorum. – JMRboosties

0

Dört farklı sekme için ayarlanan kenar boşluğudur. Çalıştığınız sekmelerin sayısına uygun bir bağlantı elde etmek için setMargins (v1, v2, v3, v4) işlev değerlerini değiştirebilirsiniz. Umarım bu yardımcı olur. TabHost'un, çalıştığınız farklı sekmeleri barındıran TabHost'un nesnesi olduğunu lütfen unutmayın.

Display display = getWindowManager().getDefaultDisplay(); 
      int width = display.getWidth(); 
      View currentView; 
      for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
      { 
       //This code removes divider between tabs 
       tabHost.getTabWidget().setDividerDrawable(null); 
       tabHost.getTabWidget().getChildAt(i).setLayoutParams(new 
         LinearLayout.LayoutParams((width/8)-2,50)); 
       currentView = tabHost.getTabWidget().getChildAt(i); 
        LinearLayout.LayoutParams currentLayout = 
         (LinearLayout.LayoutParams) currentView.getLayoutParams(); 
        currentLayout.setMargins(30, 5, 80, 0); 

      } 
1

@Todor Kostov iyi cevap, ama son sekme de marjı çünkü sekmelerin merkezi arabayla kaydırılır.

sadece mTabLayout.getCodeCount() yerine mTabLayout.getTabCount() - 1 kullanın.

 for(int i=0; i < mTabLayout.getTabCount() - 1; i++) { 
      View tab = ((ViewGroup) mTabLayout.getChildAt(0)).getChildAt(i); 
      ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) tab.getLayoutParams(); 
      p.setMargins(0, 0, 50, 0); 
      tab.requestLayout(); 
     } 
İlgili konular