2012-08-22 12 views
5

मैं ActionBar की टैब सुविधा का उपयोग PageViewer के साथ कर रहा हूं, लेकिन एक समस्या को पूरा करता हूं। मेरी नेक्सस 7 पर, टैब इस तरह दिखाने:एक्शनबार के टैब और शीर्षक/होम/मेनू को विभाजित करने के लिए कैसे बल दें?

On Nexus 7

आप देख सकते हैं शीर्षक वजह से अंतरिक्ष की कमी करने के लिए काटा जाता है। लेकिन Android 4.0 के साथ एचटीसी Incredible S पर ऐसा लगता है कि पता चलता है:

enter image description here

और यह जो मैं चाहता है। मैं वास्तव में चाहता हूं कि टैब बार स्क्रीन के नीचे रखा जाए, लेकिन दो पंक्तियों में विभाजित होना और शीर्ष पर दोनों स्वीकार्य हैं।

क्या कोई जानता है कि Nexus 7 पर ऐप को कैसे बल देना है टैब टैब को दूसरी पंक्ति में विभाजित करना भी? धन्यवाद!

उत्तर

15

AFAIK, अकेले एक्शन बार निर्णय लेता है कि टैब को दूसरी पंक्ति पर रखना है या नहीं, और हम इसे प्रभावित नहीं कर सकते हैं।

इसके अलावा, ध्यान रखें कि कई मामलों में, आपके टैब एक ड्रॉप-डाउन सूची द्वारा प्रतिस्थापित नहीं होंगे - मूल रूप से, एंड्रॉइड सूची नेविगेशन में टैब नेविगेशन को परिवर्तित करता है।

आप यह सुनिश्चित करें कि अपने टैब हमेशा टैब हैं, और कार्रवाई पट्टी के नीचे हमेशा से रहे हैं, कार्रवाई बार से टैब को हटाने और (एंड्रॉयड समर्थन पैकेज से अपनी सामग्री के लिए एक ViewPager का उपयोग कर, या तो PagerTabStrip साथ करने के लिए स्विच करना चाहते हैं , जहां ViewPager से आता है) या टैब के लिए ViewPagerIndicator प्रोजेक्ट से टैब संकेतक। एक साइड लाभ के रूप में, आपकी सामग्री अब क्षैतिज रूप से स्वाइप करने योग्य है, टैब के बीच स्थानांतरित करने में सक्षम है, जो आजकल एक लोकप्रिय दृष्टिकोण है।

factr में मैं चाहता हूँ टैब बार हालांकि सहन इस बात का ध्यान

कि इस Android डिजाइन दिशानिर्देशों का उल्लंघन स्क्रीन के तल पर रखा जाना: http://developer.android.com/design/patterns/pure-android.html

-1

कोई रास्ता नहीं है, से बचने के लिए टैब को स्पिनर बनने के बाद टैब ने

1

यदि आपको फोन और टैबलेट का समर्थन करने की आवश्यकता है और अलग-अलग कार्यान्वयन का उपयोग नहीं करना चाहते हैं तो आप इसे अपनी गतिविधि में डाल सकते हैं:

@Override 
public Resources getResources() { 
    if (mResourcesImpl == null) { 
     mResourcesImpl = new ResourcesImpl(super.getResources()); 
    } 
    return mResourcesImpl; 
} 

class ResourcesImpl extends Resources { 
    private Resources mResources; 
    private Set<Integer> mActionBarEmbedTabsIds = new HashSet<Integer>(); 

    ResourcesImpl(Resources resources) { 
     super(resources.getAssets(), resources.getDisplayMetrics(), resources.getConfiguration()); 

     mResources = resources; 

     String packageName = getPackageName(); 
     mActionBarEmbedTabsIds.add(mResources.getIdentifier("abc_action_bar_embed_tabs", "bool", packageName)); 
     mActionBarEmbedTabsIds.add(mResources.getIdentifier("abc_action_bar_embed_tabs_pre_jb", "bool", packageName)); 
     mActionBarEmbedTabsIds.add(mResources.getIdentifier("action_bar_embed_tabs", "bool", "android")); 
     mActionBarEmbedTabsIds.add(mResources.getIdentifier("action_bar_embed_tabs_pre_jb", "bool", "android")); 
     mActionBarEmbedTabsIds.remove(0); 
    } 

    @Override 
    public boolean getBoolean(int id) throws NotFoundException { 
     if (mActionBarEmbedTabsIds.contains(id)) { 
      return areActionBarTabsEmbed(); // stacked ot embed goes here 
     } 
     return super.getBoolean(id); 
    } 
} 
7

मैं इसका उपयोग जिंजरब्रेड से किटकैट तक एक्शनबार स्टैक्ड या अवांछित टैब को मजबूर करने के लिए करता हूं।

से Modded: http://www.blogc.at/2014/01/23/android-tabs-appear-above-or-below-actionbar/

http://i.imgur.com/fO0Vk3V.png

setHasEmbeddedTabs(mActionbar,false); 

    public static void setHasEmbeddedTabs(Object inActionBar, final boolean inHasEmbeddedTabs) 
    { 
     // get the ActionBar class 
     Class<?> actionBarClass = inActionBar.getClass(); 

     // if it is a Jelly Bean implementation (ActionBarImplJB), get the super class (ActionBarImplICS) 
     if ("android.support.v7.app.ActionBarImplJB".equals(actionBarClass.getName())) 
     { 
      actionBarClass = actionBarClass.getSuperclass(); 
     } 

     // if Android 4.3 > 
     if ("android.support.v7.app.ActionBarImplJBMR2".equals(actionBarClass.getName())){ 
      actionBarClass = actionBarClass.getSuperclass().getSuperclass(); 
     } 

     try 
     { 
      // try to get the mActionBar field, because the current ActionBar is probably just a wrapper Class 
      // if this fails, no worries, this will be an instance of the native ActionBar class or from the ActionBarImplBase class 
      final Field actionBarField = actionBarClass.getDeclaredField("mActionBar"); 
      actionBarField.setAccessible(true); 
      inActionBar = actionBarField.get(inActionBar); 
      actionBarClass = inActionBar.getClass(); 
     } 
     catch (IllegalAccessException e) {} 
     catch (IllegalArgumentException e) {} 
     catch (NoSuchFieldException e) {} 

     try 
     { 
      // now call the method setHasEmbeddedTabs, this will put the tabs inside the ActionBar 
      // if this fails, you're on you own <img class="wp-smiley" alt=";-)" src="http://www.blogc.at/wp-includes/images/smilies/icon_wink.gif"> 
      final Method method = actionBarClass.getDeclaredMethod("setHasEmbeddedTabs", new Class[] { Boolean.TYPE }); 
      method.setAccessible(true); 
      method.invoke(inActionBar, new Object[]{ inHasEmbeddedTabs }); 
     } 
     catch (NoSuchMethodException e)  {} 
     catch (InvocationTargetException e) {} 
     catch (IllegalAccessException e) {} 
     catch (IllegalArgumentException e) {} 
    } 
+0

यह महान काम करता है! मैं यह इंगित करना चाहता था कि इसे अभिविन्यास परिवर्तनों पर याद किया जाना चाहिए। –

संबंधित मुद्दे