2013-11-03 5 views
8

fill_parent नहीं करता है मैं इस लेआउट के साथ ActionBar.Tab setCustomView() विधि का उपयोग कर रहा:एंड्रॉयड ActionBar.Tab setCustomView()

public void setActionBar() 
{ 
    ActionBar actionBar = getSupportActionBar(); 
    //actionBar.hide(); 
    actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    actionBar.setDisplayShowHomeEnabled(false); 
    actionBar.setDisplayShowTitleEnabled(false);   
    //set action bar navigation mode 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);   
    //set tabs  
    //home tab 
    Tab tab = actionBar.newTab().setText(TAB_HOME).setTabListener(new PicoTabListener<StartFragment>(this, StartFragment.class));  
    tab.setCustomView(R.layout.tab_background); 
    actionBar.addTab(tab); 
    //events tab 
    tab = actionBar.newTab().setText(TAB_EVENTS).setTabListener(new PicoTabListener<EventsFragment>(this, EventsFragment.class)); 
    actionBar.addTab(tab);  
    //enter event code 
    tab = actionBar.newTab().setText(TAB_CODE).setTabListener(new PicoTabListener<EnterCodeFragment>(this, EnterCodeFragment.class)); 
    actionBar.addTab(tab);  
} 
:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/background_grey" > 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="Test Tab" 
     android:textColor="@color/background_dark_green"/> 

</RelativeLayout> 

यह मेरा समारोह ActionBar सेटिंग

और मेरी गतिविधि लेआउट:

<?xml version="1.0" encoding="utf-8"?> 
<!-- This is the main layout of the application --> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/fragment_basic_root" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@color/background_dark_green" > 

</RelativeLayout> 

परिणाम तेजी इस तरह देखने के लिए (धूसर पृष्ठभूमि के साथ ऊपरी बाएँ टैब): enter image description here

मैं पूरे टैब को भरने और सही तरीके से काम करने के लिए अपना कस्टम दृश्य कैसे बना सकता हूं?

मैं Android 2.3

+0

आप अपनी गतिविधि XML लेआउट पोस्ट करें सकता है? – nio

+0

किया गया। मैंने अपना प्रश्न –

उत्तर

0

के लिए सहायता पैकेज v7 उपयोग कर रहा हूँ आप जब actionbarcompat के setCustomView साथ मन में

रखते हुए कि यह मूल तत्व की गद्दी, चौड़ाई, ऊंचाई की तरह लगता है काम कर android:margin और android:padding पर भरोसा करने की है , और मार्जिन, अनदेखा हो जाता है।

3

बस अपने आप को इस में पड़ गए और समाधान पता लगा। आपको उस टैबव्यू के लिए शैली बनाना चाहिए जो पृष्ठभूमि और पैडिंग को साफ़ करता है और इसे अपनी थीम में उपयोग करता है।

styles.xml:

<style name="Custom.ActionBar.TabView.Empty" parent="@style/Widget.AppCompat.ActionBar.TabView"> 
    <item name="android:background">@null</item> 
    <item name="android:padding">0dp</item> 
</style> 

themes.xml:

<style name="Theme.Custom" parent="@style/Theme.AppCompat.Light"> 
    <item name="android:actionBarTabStyle">@style/Custom.ActionBar.TabView.Empty</item> 
    <item name="actionBarTabStyle">@style/Custom.ActionBar.TabView.Empty</item> 
</style> 
+0

अपडेट किया है जो मेरे लिए काम नहीं किया है। कोई वैकल्पिक समाधान? –

+0

टैब में रिलेवेटिवआउट के 'लेआउट पैराम्स' को 'MATCH_PARENT' पर प्रोग्रामेटिक रूप से सेट करने का प्रयास करें ताकि आपका कस्टम व्यू टैब में सभी उपलब्ध स्थान ले सके। मैंने एक टैब को बैज जोड़ने के विषय पर एक ब्लॉग पोस्ट लिखा था, क्योंकि मेरे पास भी मुद्दों का एक समूह था: [http://kevinpelgrims.com/blog/2014/06/24/adding-a-badge- टू-ए-एक्शनबार-टैब] [1] [1]: http://kevinpelgrims.com/blog/2014/06/24/adding-a-badge-to-an-actionbar-tab – kevinpelgrims

1

हर बनाई टैब वस्तु के लिए बस जोड़ने layoutParams:

..  
tab.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)); 
actionBar.addTab(tab); 
+0

धन्यवाद, तुमने मुझे बचाया! हालांकि मेरा मामला थोड़ा अलग था - मैंने एक्शनबार के कस्टम व्यू (इसकी रूट) लेआउट_विड्थ = "फिल_पैरेंट" सेट करने की कोशिश की, लेकिन यह काम नहीं करता है (ऐसा लगता है जैसे यह "wrap_content" पर सेट है)। 'cView.setLayoutParams (नया सापेक्ष Layout.LayoutParams (RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT)); ' – Mixaz

+0

समस्या हल करें, मैं उल्लेख करना भूल गया कि मैं' cView.setLayoutParams (...) 'actionBar के बाद कॉल करता हूं। setCustomView (cView); ' – Mixaz