2016-04-11 6 views
9

क्या टैबलाउट में टैब के बीच मार्जिन जोड़ने का कोई तरीका है? मैंने विजेट के लिए कस्टम शैली का उपयोग करने का प्रयास किया है। डिज़ाइन। टैबलाउट, लेकिन केवल पैडिंग से संबंधित गुण हैं, लेकिन कोई मार्जिन नहीं है।टैबलाउट में टैब के बीच मार्जिन कैसे जोड़ें?

+1

मार्जिन का मतलब है .. टैब के बीच अंतर क्या है? –

+0

हां, ठीक है –

+0

मार्जिन जोड़ने लगता है वास्तव में संभव नहीं है हालांकि आप इसे काम करने के लिए कुछ चाल कर सकते हैं। एक डमी दृश्य या टैब जोड़ सकते हैं। –

उत्तर

22

ठीक साथी, उस पर 2-3 घंटे खर्च करने के बाद मुझे अंततः एक समाधान मिला।

यदि आप टैबलेआउट का उपयोग कर रहे हैं तो शैलियों का उपयोग करके टैब में मार्जिन जोड़ने का कोई तरीका नहीं है। (जैसा कि पहले एंड्रॉइड के साथ @ कनेक्टिंग लाइफ)

लेकिन, आप कुछ जावा कोड लिखकर ऐसा कर सकते हैं। अपने सभी कोड के सभी कि एक के समान दिखना चाहिए:

  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(); 
      } 

आदेश में एक दृश्य हम पहले कंटेनर जो उन्हें शामिल प्राप्त करने के लिए के रूप में प्रत्येक और हर टैब प्राप्त करने के लिए। इस मामले में टैबलेआउट टैब के कंटेनर के रूप में स्लाइडिंगटैबस्ट्रिप का उपयोग कर रहा है। SlidingTabStrip TabLayout का पहला बच्चा है:

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

और इस छोटे से विस्तार के बाद, सब कुछ बहुत सीधे आगे है।

+0

यह इतना सही है! – Kammaar

+0

आपका समाधान मेरे लिए वास्तव में अच्छा काम करता है! अगर कोई dimens.xml फ़ाइल में निहित मार्जिन जोड़ना चाहता है, तो वह getResources()। GetDimensionPixelSize (R.dimen.your_dimens) का उपयोग निश्चित पिक्सेल मान के बजाय "50" के रूप में कर सकता है। –

+1

यह काम करता है, हालांकि जब आप ऐसा करते हैं तो अंडरलाइन संकेतक दुर्व्यवहार करना शुरू कर देता है, काम ठीक से स्वाइप करता है, लेकिन टैब क्लिक पर दिए गए बिंदु पर पेजिंग इसे तोड़ देता है। मैं अब एक फिक्स में देख रहा हूँ। – JMRboosties

0

यह चार अलग-अलग टैब के लिए मार्जिन सेट है। आप जिन टैबों के साथ काम कर रहे हैं, उनके लिए उपयुक्त फिटिंग प्राप्त करने के लिए आप सेटमार्गिन (v1, v2, v3, v4) फ़ंक्शन मानों को बदल सकते हैं। आशा है कि ये आपकी मदद करेगा। कृपया ध्यान दें कि टैबहोस्ट टैबहोस्ट की ऑब्जेक्ट है जो आप जिन कामों के साथ काम कर रहे हैं, उन्हें होस्ट कर रहे हैं।

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 कोस्तोव अच्छी तरह से उत्तर दिया, लेकिन टैब के केंद्र फिसल रहे हैं, क्योंकि पिछले टैब भी मार्जिन है।

तो के बजाय mTabLayout.getTabCount() - 1 का उपयोग करें।

 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(); 
     } 
संबंधित मुद्दे