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.
He intentado usar un IcsLinearLayout de ActionBarSherlock como así:
- Cómo mostrar el título de la barra de acciones de Android sin que se produzca el truncamiento
- ActionBar setBackgroundDrawable () anulando el fondo de Thread / Handler
- GetSupportFragmentManager () no está definido
- Cambiar iconos del menú ActionBar según el estilo
- Utilizar ActionBarSherlock con el nuevo SupportMapFragment
<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.
- ¿Cómo solucionar la barra de acción Sherlock pestañas de ancho inconsistencia?
- ActionBarSherlock + Tabbed Fragments + ViewPager insider un fragmento
- ¿Cómo puedo aplicar el tema android de HoloEverywhere cuando se usa ActionBarSherlock?
- Cómo extender una SherlockFragmentActivity al implementar Facebook SDK 3.0
- ActionBar ERROR: Navegación de modo de lista no visible después de usar SearchView
- Error: El atributo "***" ya se ha definido al utilizar dos proyectos de biblioteca en Android
- Barra de acciones Tabulaciones CustomView demasiado largo
- Barra de acción con la vista de búsqueda. Problemas de compatibilidad inversa
// 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.
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.
- Informe de error de verificador de licencia – ¿qué significa esto?
- ¿Cómo configurar un tema para toda la aplicación en código, pero no en el Manifiesto?