2012-09-12 18 views
5

के साथ एक्शनबार टैब को दोहराएं, मैं कस्टम नेविगेशन के साथ एक एक्शनबार रखना चाहता हूं जहां कस्टम दृश्य मानक एक्शन बार टैब की तरह दिखते हैं। मुझे पता है कि यह पहिया को फिर से शुरू करने जैसा लगता है लेकिन इसका मतलब है कि नीचे दिए गए टैब के समान पंक्ति पर मेनू बटन हो सकता है। यह एक डिजाइन आवश्यकता है और मानक ऐड्रॉइड व्यवहार की तुलना में इस ऐप के लिए व्यावहारिक रूप से अधिक यूआई भावना बनाता है। How I would like the tabs to lookकस्टम व्यू

मैं बहुत तरह ActionBarSherlock से एक IcsLinearLayout का उपयोग कर की कोशिश की है:

<IcsLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="fill_parent" 
      android:orientation="horizontal" 
      android:layout_height="50dip"> 
     <Button 
      android:id="@+id/tab_1" 
      android:layout_height="match_parent" 
      android:gravity="center" 
      android:layout_width="wrap_content" 
      android:textStyle="bold" 
      android:text="TAB_1" 
      android:background="@drawable/abs__item_background_holo_light" 
      /> 
     <Button 
      android:id="@+id/tab_2" 
      android:layout_height="match_parent" 
      android:gravity="center" 
      android:layout_width="wrap_content" 
      android:textStyle="bold" 
      android:text="TAB_2" 
      android:background="@drawable/abs__item_background_holo_light" 
      /> 
</IcsLinearLayout> 

लेकिन उस ActionButtons replicates और मैं कैसे टैब्स को दोहराने के लिए पता नहीं है।

मुझे लगता है मैं की आवश्यकता होगी:

  • एक विशेष टैप कंटेनर viewgroup (शायद ActionBarSherlock पुस्तकालय से)
  • बार देखा गया जो एबीएस पुस्तकालय से एक पृष्ठभूमि संसाधन के साथ टैब की तरह लग रहे।
  • कुछ कोड को इंगित करने के लिए इंगित करने के बाद यह चयनित रहता है ( रेडियोबटन के समान)।

नमूने या इसी तरह के समाधान (यहां तक ​​कि एक्शनबार शेरलॉक लाइब्रेरी के भीतर) के किसी भी संकेतक की सराहना की जाएगी।

उत्तर

13

// एम्बेडेड टैब को सक्षम करने

//pre-ICS 
if (actionBarSherlock instanceof ActionBarImpl) { 
    enableEmbeddedTabs(actionBarSherlock); 

//ICS and forward 
} else if (actionBarSherlock instanceof ActionBarWrapper) { 
    try { 
     Field actionBarField = actionBarSherlock.getClass().getDeclaredField("mActionBar"); 
     actionBarField.setAccessible(true); 
     enableEmbeddedTabs(actionBarField.get(actionBarSherlock)); 
    } catch (Exception e) { 
     Log.e(TAG, "Error enabling embedded tabs", e); 
    } 
} 

//helper method 
private void enableEmbeddedTabs(Object actionBar) { 
    try { 
     Method setHasEmbeddedTabsMethod = actionBar.getClass().getDeclaredMethod("setHasEmbeddedTabs", boolean.class); 
     setHasEmbeddedTabsMethod.setAccessible(true); 
     setHasEmbeddedTabsMethod.invoke(actionBar, true); 
    } catch (Exception e) { 
     Log.e(TAG, "Error marking actionbar embedded", e); 
    } 
} 

इस कोड को पूरी तरह से काम करता है। इसे मेरे ऐप में आज़माया। आगे संदर्भ के लिए - https://groups.google.com/forum/#!topic/actionbarsherlock/hmmB1JqDeCk

+0

अच्छी तरह से काम करता है! एक नोट के रूप में मैंने पाया कि बाकी एक्शनबार टैब आदि सेट करने से पहले इसे करने की आवश्यकता है। – DavidBriggs

5

पदानुक्रम दर्शक का उपयोग करके मुझे लगता है कि हमने यह कैसे किया है यह कैसे किया है। यह पता चला कि यह बिल्कुल मुश्किल नहीं था। आपको एबीएस लाइब्रेरी से स्क्रॉलिंगटैबकंटनर व्यू की आवश्यकता है और आप उसमें टैब जोड़ सकते हैं।

How it all looks with tabs on a narrow action bar

public class MainActivity extends SherlockActivity implements ActionBar.TabListener { 
/** 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ScrollingTabContainerView root = new ScrollingTabContainerView(this); 
    ActionBar.Tab tab1 = getSupportActionBar().newTab(); 
    tab1.setText("TAB 1"); 

    tab1.setTabListener(this); 

    ActionBar.Tab tab2 = getSupportActionBar().newTab(); 
    tab2.setText("TAB 2"); 
    tab2.setTabListener(this); 

    root.addTab(tab1, 0, true); 
    root.addTab(tab2, 1, false); 

    getSupportActionBar().setCustomView(root); 
    getSupportActionBar().setDisplayShowCustomEnabled(true); 
    getSupportActionBar().setTitle("App Title"); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu){ 
    menu.add("MENU ITEM 1"); 
    menu.add("MENU ITEM 2"); 
    return true; 
} 

@Override 
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { 
    //To change body of implemented methods use File | Settings | File Templates. 
} 

@Override 
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { 
    //To change body of implemented methods use File | Settings | File Templates. 
} 

@Override 
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { 
    //To change body of implemented methods use File | Settings | File Templates. 
} 

मुझे आशा है कि यह किसी को मदद मिलती है।

+0

उत्तर के लिए धन्यवाद। यह वास्तव में सहायक था :) एक छोटी सी गड़बड़ी का सामना करना पड़ रहा है। मैंने टैब के लिए पेज पेजर लागू किया। अब जब मैं टुकड़े को घुमाता हूं तो मुझे बल बंद हो जाता है क्योंकि कस्टम दृश्य सेट नहीं होता है चयन किया गया NavitItem (स्थिति); परिभाषित । उसके लिए कोई काम? – nia

+0

यह आईसीएस और जेलीबीन में काम नहीं करता है :(इसके लिए कोई काम आसपास है? – nia

+0

हम्म। मेरे पास पिछले हफ्ते से यह देखने का समय नहीं है, लेकिन मैं देख सकता हूं कि मैं क्या कर सकता हूं। – DavidBriggs

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