2012-03-11 11 views
35

मैं टैब के साथ एक्शनबार के लिए एक कस्टम दृश्य का उपयोग कर रहा हूं। मेरी समस्या कस्टम दृश्य का क्रम है। एंड्रॉइड प्रदर्शित कर रहा है टैब - जो मैं नहीं चाहता हूं।टैब से पहले एक कस्टम दृश्य दिखाने के लिए एंड्रॉइड एक्शनबार को कैसे अनुकूलित करें?

मैं कस्टम दृश्य प्रदर्शित करता हूं टैब से पहले।

क्या टैब से पहले कस्टम दृश्य दिखाने के लिए actionBar को कस्टमाइज़ करने का कोई तरीका है? या यह संभव नहीं है?

कोड:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    final ActionBar bar = getActionBar(); 
    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    View customActionBarView = 
     getLayoutInflater().inflate(R.layout.home_actionbar, null, true); 
    ActionBar.LayoutParams lp = 
     new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT, 
      LayoutParams.WRAP_CONTENT); 

    lp.gravity = Gravity.START; 
    bar.setCustomView(customActionBarView, lp); 
    bar.setLogo(R.drawable.logo); 
    bar.setHomeButtonEnabled(true); 
    bar.setDisplayShowCustomEnabled(true); 

    bar.addTab(bar.newTab() 
     .setText("Stuff") 
     .setTabListener(new TabListener<StuffFragment>(
      this, "stuff", StuffFragment.class))); 

    bar.addTab(bar.newTab() 
     .setText("Friends") 
     .setTabListener(new TabListener<ContactsFragment>(
      this, "friends", ContactsFragment.class))); 

    bar.addTab(bar.newTab() 
     .setText("Messages") 
     .setTabListener(new TabListener<ConversationsFragment>(
      this, "messages", ConversationsFragment.class))); 

    if (savedInstanceState != null) { 
     bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0)); 
    } 

    bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | 
     ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_USE_LOGO); 

    bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);  
} 

enter image description here

+0

हम कुछ कोड को देखने के लिए की आवश्यकता होगी। साथ ही, आपको 'पहले' और 'बाद' के माध्यम से क्या मतलब है, इस बारे में अधिक स्पष्ट होने का प्रयास करना चाहिए। उन्हें कैपिटल करना अब चीजों को क्रिस्टल नहीं बनाता है। – adneal

+0

कोड और आरेख –

+2

ive के साथ अद्यतन किया गया हर जगह खोजा गया। ऐसा लगता है कि एक्शनबार पर प्रत्येक आइटम (लोगो, टैब, कस्टम व्यू और मेन्यू) कैसे स्थित है इस पर कोई नियंत्रण नहीं है। एफएमएल! –

उत्तर

0

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

ActionBar.LayoutParams lp = new ActionBar.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);    
lp.gravity = Gravity.LEFT; 
customView.setLayoutParams(lp); 
+0

i ' हमने बिना किसी सफलता के उपरोक्त कई अलग-अलग समाधानों की कोशिश की है। इसके बजाय मैंने एक्शन बार को कुचलने और पूरी तरह से कुछ कस्टम लागू करने का फैसला किया है। –

+0

तो अगर आप इसे काम नहीं कर पा रहे हैं तो इसे डाउनवोट क्यों करें? मेरा जवाब सही था, – Lee

0

उपयोग ActionBarSherlock, सभी Android संस्करण के लिए कस्टम ActionBar का बहुत अच्छा कार्यान्वयन और उपयोग करने के लिए बहुत ही आसान है।

या आप कस्टम टाइटल बार का उपयोग करके अपना स्वयं का एक्शनबार बना सकते हैं और इसके निष्पक्ष को लागू करने में काफी आसान है। आप this और this उदाहरण कस्टम शीर्षक बार के बहुत अच्छे उदाहरण देख सकते हैं।

3

यह टैब और कस्टम दृश्यों का उपयोग करते समय इच्छित व्यवहार प्रतीत होता है। https://code.google.com/p/android/issues/detail?id=36191#c3

यदि आप ActionBarSherlock - Tabs appearing ABOVE actionbar with custom view पर एक नज़र डालें तो कई अन्य लोग भी इसका अनुभव कर रहे हैं और कुछ लोगों ने समाधान की पेशकश की है।

मैं किसी भी समाधान को काम करने में असमर्थ रहा हूं, लेकिन वे आपके लिए काम कर सकते हैं। चाल यह सुनिश्चित करने के लिए प्रतीत होती है कि लोगो छिपाने के लिए सेट नहीं है। ActionBarSherlock का उपयोग करते समय
getActionBar().setDisplayShowHomeEnabled(true) या getSupportActionBar().setDisplayShowHomeEnabled(true) पर कॉल करें।

फिर फोन:

View homeIcon = findViewById(
    Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
    android.R.id.home : R.id.abs__home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 
((View) homeIcon).setVisibility(View.GONE); 

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

जैसा कि मैंने कहा था कि मैं यह काम करने में असमर्थ था, लेकिन कुछ लोगों को सफलता मिली है।

शुभकामनाएं।

+0

यह वास्तव में एक्शन बार हैकिंग की भावना में है। उत्कृष्ट सुझाव, यह काम किया! – foxx1337

2

मुझे एक ही समस्या थी और मैंने इसे हल करने का एक तरीका निकाला। यह एक "सुरुचिपूर्ण" समाधान नहीं है लेकिन यह सबसे अच्छा था जो मुझे मिल सकता था। पहली बात यह है कि आप मानक एक्शनबार व्यवहार को संशोधित करना चाहते हैं, इसलिए आपको हमेशा गैर मूल कार्यान्वयन का उपयोग करने के लिए एक्शनबार शेरलोक को मजबूर करना होगा। कि खुले ActionBarSherlok.java करते हैं और कोड की इस पंक्ति टिप्पणी करने के लिए:

registerImplementation(ActionBarSherlockNative.class); 

तो सभी मूल्यों-v11 मान-v14 आदि को हटा दें और हमेशा विस्तार करने के लिए Theme.Sherlock और कभी थीम सुनिश्चित करें।होलो

इस बिंदु पर आप सुनिश्चित हैं कि एक्शनबार कार्यान्वयन हमेशा जेक व्हार्टन द्वारा लिखित एक है। केवल एक चीज करने के लिए छोड़ दिया गया है एक्शनबार दृश्य लेआउट जिस तरह से आप चाहते हैं। onLayout में ओपन ActionBarView.java और() विधि सही इस टुकड़े

if (mProgressView != null) { 
     mProgressView.bringToFront(); 
     final int halfProgressHeight = mProgressView.getMeasuredHeight()/2; 
     mProgressView.layout(mProgressBarPadding, -halfProgressHeight, 
       mProgressBarPadding + mProgressView.getMeasuredWidth(), halfProgressHeight); 
    } 

आप काम हो गया पहले कोड

if (mExpandedActionView == null) { 
     final boolean showTitle = mTitleLayout != null && mTitleLayout.getVisibility() != GONE && 
       (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0; 
     if (showTitle) { 
      x += positionChild(mTitleLayout, x, y, contentHeight); 
     } 

     switch (mNavigationMode) { 
      case ActionBar.NAVIGATION_MODE_STANDARD: 
       break; 
      case ActionBar.NAVIGATION_MODE_LIST: 
       if (mListNavLayout != null) { 
        if (showTitle) x += mItemPadding; 
        x += positionChild(mListNavLayout, x, y, contentHeight) + mItemPadding; 
       } 
       break; 
      case ActionBar.NAVIGATION_MODE_TABS: 
       if (mTabScrollView != null) { 
        if (showTitle) x += mItemPadding; 
        x += positionChild(mTabScrollView, x, y, contentHeight) + mItemPadding; 
       } 
       break; 
     } 
    } 

के इस टुकड़े के लिए कदम! उम्मीद है कि यह

0

क्या आप टैबलेट के लिए ऐप बना रहे हैं? जहां तक ​​मुझे पता है, एक्शनबार की टैब बार मूल रूप से सेलफोन पर इसके नीचे दिखाई देती है।
यदि टैबलेट पर, मुझे डर है कि आप टैब की स्थिति समायोजित नहीं कर सकते हैं। मैं क्या सोच सकता हूं कि आपको नेविगेशन मोड का उपयोग करके छोड़ना होगा और एक कस्टम व्यू बनाना होगा जो क्रियाबारी टैब को प्रतिस्थापित करने के लिए टैब की तरह दिखता है। बेशक यह नेविगेशन सामग्री से निपटने के लिए बहुत सारे प्रयासों का कारण बनता है।

0

बस अपने घर के बटन के लिए एक कस्टम दृश्य बनाएं। इस दृश्य में आप बाईं ओर स्थित स्थिति और लोगो दोनों कस्टम दृश्य को जोड़ सकते हैं। तब के रूप में टैब जोड़ सामान्य

इस समाधान का केवल नकारात्मक पक्ष यह है कि आप अपने आप को वापस बटन के राज्य बनाए रखने के लिए (यदि आप इसे बिल्कुल भी उपयोग करें)

0

पहले सेट ActionBar की संपत्ति की आवश्यकता होगी "DisplayShowHomeEnabled" है "सत्य": actionBar.setDisplayShowHomeEnabled (सत्य);

और उसके बाद:

View homeIcon = findViewById(android.R.id.home); 
     ((View) homeIcon.getParent()).setVisibility(View.GONE); 
     ((View) homeIcon).setVisibility(View.GONE); 

मुझे आशा है कि यह मदद करता है :)

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