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