2013-11-03 10 views
8

Używam metody ActionBar.Tab setCustomView() z tego układu:Android ActionBar.Tab setCustomView() nie fill_parent

<?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> 

To jest moja funkcja ustawiania ActionBar:

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

i mój układ działalność:

<?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> 

Te wyniki szwy wyglądać następująco (lewa górna zakładka z szarym tłem): enter image description here

Jak mogę utworzyć własny widok, aby wypełnić całą kartę i działał poprawnie?

Używam Support Package v7 dla Androida 2.3

+0

mógłbyś pisać swoją aktywność układu xml? – nio

+0

zrobione. zaktualizowałem moje pytanie –

Odpowiedz

0

trzeba polegać na android:margin i android:padding gdy ma do czynienia z setCustomView actionbarcompat za

mając na uwadze, że wydaje się, że element główny jest napawania, szerokość, wysokość i margines zostaje zignorowany.

3

Właśnie wpadł ten sam i zorientowali się rozwiązanie. Powinieneś stworzyć styl dla tabview, który czyści tło i dopełnienie i używa go w twoim motywie.

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

nie działa dla mnie. Jakieś alternatywne rozwiązanie? –

+0

Spróbuj ustawić program "LayoutParams" w RelativeLayout na karcie "MATCH_PARENT" programowo, aby niestandardowy widok zajmował całe dostępne miejsce na karcie. Napisałem post na blogu na temat dodawania znaczka do karty, ponieważ miałem też kilka problemów: [http://kevinpelgrims.com/blog/2014/06/24/adding-a-badge- do paska czynności) [1] [1]: http://kevinpelgrims.com/blog/2014/06/24/adding-a-badge-to-an-actionbar-tab – kevinpelgrims

1

Do każdego utworzonego obiektu karcie wystarczy dodać layoutParams:

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

Dzięki, uratowałeś mnie! Chociaż mój przypadek był trochę inny - próbowałem ustawić niestandardowy widok ActionBar (jego root) layout_width = "fill_parent", ale nie działa (działa tak, jakby był ustawiony na "wrap_content"). 'cView.setLayoutParams (new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT));' rozwiązany problem – Mixaz

+0

Zapomniałem wspomnieć, że nazywam 'cView.setLayoutParams (...)' po 'actionBar. setCustomView (cView); ' – Mixaz

Powiązane problemy