Las pestañas de navegación de Android ActionBar parecen diferentes en teléfonos y tabletas
¿Es posible que las pestañas de navegación de ActionBar se muestren iguales en teléfonos y tabletas?
Vea las imágenes para teléfonos y tablets a continuación:
- Android y ActionBarCompat: cómo cambiar la visibilidad de las acciones en tiempo de ejecución en dispositivos pre-ICS?
- Indicador de progreso de la barra de acción y botón de actualización
- Cómo eliminar la flecha izquierda de la barra de acción en android?
- La barra de acción de Android nunca se divide en la pantalla de 5.1 "
- Barra de acción android onNavigationItemSelected
TELÉFONO:
TABLETA:
La documentación de Android indica "… cuando la pantalla es lo suficientemente amplia, las pestañas aparecen en la barra de acción junto a los botones de acción …". No queremos que aparezcan en ActionBar . ¿Alguna solución?
- Anulación de androide: elipse en el subtítulo ActionBar
- ¿Hay alguna manera de desactivar la animación show / hide de ActionBar?
- Fondo de Android ActionBar (cuando la aplicación se reduce / minimiza)
- Estilizar la vista de búsqueda de android y la lista desplegable en la barra de acciones
- Cambiar la barra de acción color del título Theme.AppCompat.Light.DarkActionBar android
- El icono de la aplicación no aparece en la barra de acciones de Android
- Compatibilidad con Android ActionBar
- Styling Action Bar Color de texto - Android
Las pestañas ActionBar
son creadas por ScrollingTabContainerView
. El ActionBarView
, la View
real de la ActionBar
, contiene un método ActionBarView.setEmbeddedTabView
que es esencialmente responsable de la colocación de las pestañas debajo o incrustadas en ActionBar
.
Cuando la ActionBar
se inicializa en Activity
, utiliza la ActionBarPolicy
para determinar cuándo usar las pestañas incrustadas basadas en un valor boolean
definido como true
en los recursos del sistema , pero false
en el modo vertical . Por lo tanto, en esta inicialización se llama ActionBarImpl.setHasEmbeddedTabs
para determinar dónde colocar las fichas. Y también, como dicen los docs:
… cuando la pantalla es suficientemente ancha las pestañas aparecen en la barra de acción junto a los botones de acción
Entonces, ¿cómo puedo dejar de incrustar las pestañas?
Parece que tienes dos opciones aquí y una es claramente, al menos para mí, mejor que la otra.
-
Puede utilizar la reflexión para invocar
ActionBarImpl.setHasEmbeddedTabs
y configurarlo para que siempre seafalse
. Es necesario utilizar la reflexión porqueActionBarImpl
es una clase interna y no hay un métodoActionBar
público para indicar cuándo incrustar pestañas. -
Puede dejar de usar la API de
ActionBar.Tab
y cambiar a una alternativa, como GoogleSlidingTabLayout
. Esto le requerirá usar unViewPager
, que es generalmente una ventaja agradable al usar las lengüetas de todos modos y usted puede incluso utilizarla ya.
Aquí hay ejemplos para ambos:
Uso de la reflexión
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); final ActionBar actionBar = getActionBar(); // Implement your tabs ... try { final Class<?> clazz = actionBar.getClass(); final Method embedTabs = clazz.getDeclaredMethod("setHasEmbeddedTabs", boolean.class); embedTabs.invoke(actionBar, false); } catch (final Exception ignored) { // Nothing to do } }
Resultados de la reflexión
Cambio de las pestañas fijas a las pestañas desplazables
Para usar SlidingTabLayout
de Google, necesitará copiar más de dos clases en su proyecto. Las clases que necesitas son:
- SlidingTabLayout
- SlidingTabStrip
Un ejemplo de diseño que implemente el SlidingTabLayout
vería así:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <your_path_to.SlidingTabLayout android:id="@+id/slidingTabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout>
Después de inflar el diseño e inicializar el SlidingTabLayout
con View.findViewById
, llama a SlidingTabLayout.setViewPager
para vincular ViewPager
a las pestañas.
Echa un vistazo al ejemplo de Google para un proyecto completo
Resultados de la pestaña desplazable
Las pestañas desplazables se utilizan en varias aplicaciones de Google, como Play Store y Play Music. Para un breve video que demuestra, si no está familiarizado, echa un vistazo a los documentos de diseño de Android en las pestañas .
Conclusión
En resumen, yo recomendaría usar pestañas desplazables en lugar de pestañas fijas (al menos en modo horizontal), si no desea que se incrusten.
- Cómo averiguar por qué un dispositivo Android no es compatible con un APK
- Notificación del Administrador al Cliente