Replicar ActionBar Tab (s) con vista personalizada

Me gustaría tener un ActionBar con navegación personalizada donde las vistas personalizadas se parecen a las pestañas de la barra de acción estándar. Sé que suena como reinventar la rueda, pero significa que podemos tener el botón de menú en la misma fila que las pestañas como se muestra a continuación. Este es un requisito de diseño y prácticamente hace mucho más sentido de la interfaz de usuario para esta aplicación que el comportamiento estándar de Android. Cómo me gustaría que las pestañas buscar

He intentado usar un IcsLinearLayout de ActionBarSherlock como así:

<IcsLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:orientation="horizontal" android:layout_height="50dip"> <Button android:id="@+id/tab_1" android:layout_height="match_parent" android:gravity="center" android:layout_width="wrap_content" android:textStyle="bold" android:text="TAB_1" android:background="@drawable/abs__item_background_holo_light" /> <Button android:id="@+id/tab_2" android:layout_height="match_parent" android:gravity="center" android:layout_width="wrap_content" android:textStyle="bold" android:text="TAB_2" android:background="@drawable/abs__item_background_holo_light" /> </IcsLinearLayout> 

Pero eso reproduce ActionButtons y no tengo idea de cómo replicar Tabs.

Supongo que necesitaré:

  • Un grupo de pestañas de pestañas especial (probablemente de la biblioteca ActionBarSherlock)
  • Vistas que parecen pestañas con un recurso de fondo de la biblioteca ABS.
  • Algún código para indicar que después de hacer clic en la vista permanece seleccionada (similar a un RadioButton).

Cualquier puntero a muestras o soluciones similares (incluso dentro de la biblioteca ActionBarSherlock) sería muy apreciada.

// activación de pestañas incrustadas

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

Este código funciona perfectamente. Lo probé en mi aplicación. Para más referencia: https://groups.google.com/forum/#!topic/actionbarsherlock/hmmB1JqDeCk

Mediante el uso del visor de jerarquía, creo que hemos trabajado en cómo hacerlo. Resulta que no fue difícil en absoluto. Necesita un ScrollingTabContainerView de la biblioteca ABS y puede agregar pestañas a eso.

Cómo se ve todo con pestañas en una barra de acción estrecha

 public class MainActivity extends SherlockActivity implements ActionBar.TabListener { /** * Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ScrollingTabContainerView root = new ScrollingTabContainerView(this); ActionBar.Tab tab1 = getSupportActionBar().newTab(); tab1.setText("TAB 1"); tab1.setTabListener(this); ActionBar.Tab tab2 = getSupportActionBar().newTab(); tab2.setText("TAB 2"); tab2.setTabListener(this); root.addTab(tab1, 0, true); root.addTab(tab2, 1, false); getSupportActionBar().setCustomView(root); getSupportActionBar().setDisplayShowCustomEnabled(true); getSupportActionBar().setTitle("App Title"); } @Override public boolean onCreateOptionsMenu(Menu menu){ menu.add("MENU ITEM 1"); menu.add("MENU ITEM 2"); return true; } @Override public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) { //To change body of implemented methods use File | Settings | File Templates. } 

Espero que esto ayude a alguien.

  • Cambiar el tema de una actividad de un solo toque
  • Cambiar el color de texto de ActionBar
  • Error de Gradle: Android Studio, ActionbarSherlock y SlidingMenu
  • Ocultación de la tostada para la prensa larga en la acción
  • IndeterminateProgressBar en el estilo de ActionBar - problema de relleno
  • Construir un proyecto con Ant que incluye ActionbarSherlock como un proyecto de biblioteca
  • NavigationDrawer utilizando sólo la biblioteca de asistencia de Android
  • Barra de Acción de Android Icono de Sherlock para cada pestaña de recursos
  • Utilización de una clase genérica para objetos múltiples (pestañas de acciónBar)
  • Teclado suave de Android con botones superpuestos (Captura de pantalla)
  • Eliminar el elemento azul de la barra de acciones
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.