5

Zajmuję się tworzeniem aplikacji dla systemu Android przy użyciu biblioteki ActionBarSherlock. W jednej z czynności używam nawigacji z kartami w połączeniu ze zwiniętymi ActionBar (elementy akcji na dole).Wymuszenie zwinięcia kart w ActionBar

Na tym zdjęciu można zobaczyć Activity w swoim stanie obecnym stanie: Zakładki są popychane w drugim rzędzie.

Current ActionBar


W poniższym zdjęciu można zobaczyć Activity sposób chcę go mieć: Karty powinny znajdować się w górnym wierszu, a nie w drugim rzędzie. Przeczytałem już dokumentację ActionBar i ActionBarSherlock, ale nie znalazłem sposobu na wymuszenie tego zachowania.

The wished ActionBar layout

Jest to aktualny kod, służący do tworzenia ActionBar.

public class AdminActivity extends SherlockFragmentActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_admin); 

    ActionBar actionBar = getSupportActionBar(); 
    actionBar.setDisplayHomeAsUpEnabled(true); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

    ActionBar.Tab itemsTab = actionBar.newTab().setText(R.string.label_tab_items); 
    ActionBar.Tab usersTab = actionBar.newTab().setText(R.string.label_tab_users); 

    actionBar.addTab(itemsTab); 
    actionBar.addTab(usersTab); 
} 

Wszelkie pomysły?

+1

Twój tytuł mówi „zapobiegać”, ale Twoje pytanie sugeruje, że w rzeczywistości, chcesz 'Tabs' aby zwinąć do' ActionBar'. – adneal

+0

Poprawiłem to, dzięki! – damaxxed

Odpowiedz

5

Istnieje "odbicie" w tym celu. Nie przypisuję sobie zasługi za rozwiązanie, które znalazłem w tym pytaniu StackOverflow replicate ActionBar Tab(s) with custom view.

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

Zobacz także tym blogu: http://sparetimedev.blogspot.co.uk/2012/11/forcing-embedded-tabs-in-actionbar.html