android android-tabhost android-actionbar actionbarsherlock android-tabs

android - Force colapso de pestañas en ActionBar



android-tabhost android-actionbar (1)

Estoy desarrollando una aplicación para Android, utilizando la biblioteca ActionBarSherlock . En una actividad, utilizo una navegación con pestañas en combinación con una ActionBar contraída (elementos de acción en la parte inferior).

En esta imagen, puede ver la Activity en su estado actual : las pestañas se están empujando en una segunda fila.

En la siguiente imagen puede ver la Activity la manera que quiero: las pestañas deben estar en la fila superior, no en una segunda fila. Ya leí la documentación de ActionBar y ActionBarSherlock , pero no encontré la forma de forzar este comportamiento.

Este es el código actual, utilizado para crear la 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); }

¿Algunas ideas?


Hay un ''hack'' de reflexión para hacer esto. No me atribuyo la solución, que encontré en esta pregunta de , replica Tab (es) de ActionBar con vista personalizada .

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

Ver también esta publicación en el blog: http://sparetimedev.blogspot.co.uk/2012/11/forcing-embedded-tabs-in-actionbar.html