Los modos de navegación de la barra de acción están en desuso en Android L

203

Echando un vistazo al informe diff API para la vista previa de Android "L", veo que todos los métodos relacionados con los modos de navegación en la ActionBarclase (como setNavigationMode(), addTab(), selectTab(), etc.). ahora están en desuso.

La documentación explica:

Los modos de navegación de la barra de acción están en desuso y no son compatibles con las barras de acción de la barra de herramientas en línea. Considere usar otros patrones de navegación comunes en su lugar.

¿Cuál es el supuesto reemplazo?

Además, ¿son las "barras de acción de la barra de herramientas en línea" un nuevo concepto? No creo haber oído hablar de eso antes.

matiash
fuente
¿Dónde encontraste los documentos para la vista previa de L?
Kuno
8
@KlassenK Todavía no está integrado en la documentación principal, pero puede descargarlo desde developer.android.com/preview/reference.html
matiash
Gracias por el enlace a los documentos!
Robert Karl
Para setNavigationList, ¿qué usaste?
Lion789
1
@ShirishHerwade Sí, porque se fusionó con la documentación principal cuando se lanzó Android 5.0. En cualquier caso, ahora puede encontrar el aviso de desaprobación en developer.android.com/reference/android/app/…
matiash

Respuestas:

179

La nueva Biblioteca de soporte de diseño de Android agrega TabLayout , proporcionando una implementación de pestañas que coincide con las pautas de diseño de materiales para pestañas . En este videoViewPager se puede encontrar un tutorial completo sobre cómo implementar pestañas.

Obsoleto: El PagerTabStrip es parte de la biblioteca de soporte (y ha sido durante algún tiempo) y sirve como un reemplazo directo. Si prefiere las nuevas pestañas de estilo Google Play, puede usar la biblioteca PagerSlidingTabStrip o modificar cualquiera de los ejemplos proporcionados por Google SlidingTabsBasic o SlidingTabsColors como se explica en este video Dev Bytes .

ianhanniballake
fuente
8
Este es un reemplazo directo en modo vertical, con la ventaja de facilitar el uso de un encabezado extendido de tipo Material. Sin embargo, en el modo horizontal, las pestañas ActionBar se mueven automáticamente hacia arriba en la barra de acción, liberando un área importante de la pantalla. ¿Alguien sabe una manera limpia de gestionar esto con la biblioteca de soporte?
ehartwell
9
El documento del desarrollador todavía dice que usa la pestaña Barra de acción. Simlpy aún no actualizado? developer.android.com/training/implementing-navigation/…
Romulus Urakagi Ts'ai
3
Este es un reemplazo para NAVIGATION_MODE_TABS pero no para NAVIGATION_MODE_LIST: /
Geob-o-matic
2
@Geobert: NAVIGATION_MODE_LISTes mucho más fácil, dado que todo lo que hizo fue agregar un Spinner y algunos ayudantes de devolución de llamada.
ianhanniballake
2
¿Para qué es el reemplazo NAVIGATION_MODE_LIST? El mío lo enumera como obsoleto ...
Sauron
20

Ahora que los documentos de Android 5.0 están disponibles, tenemos la documentación oficial para el widget Toolbar :

Una barra de herramientas estándar para usar dentro del contenido de la aplicación.

Una barra de herramientas es una generalización de las barras de acción para su uso en diseños de aplicaciones. Mientras que una barra de acción es tradicionalmente parte de la decoración de la ventana opaca de una actividad controlada por el marco, una barra de herramientas se puede colocar en cualquier nivel arbitrario de anidamiento dentro de una jerarquía de vistas .

ToolbarTambién se puede usar un widget para reemplazar la barra de acción:

Una aplicación puede elegir designar una barra de herramientas como la barra de acción para una actividad utilizando el setActionBar()método.

La desaprobación de las pestañas en la barra de acción probablemente se deba a esto, ya que las barras de herramientas no pueden contener pestañas.

Además, está disponible para versiones anteriores de Android a través de la biblioteca appcompat. Vea esta publicación de Chris Banes para más información. Un experto:

Android 5.0 presenta un nuevo widget de barra de herramientas. Esta es una generalización del patrón ActionBar pero le brinda mucho más control y flexibilidad para usarlo. La barra de herramientas es una vista en su jerarquía como cualquier otra, lo que hace que sea más fácil intercalar con el resto de sus vistas, animar, reaccionar a los eventos de desplazamiento.

matiash
fuente
53
"mucho más control y flexibilidad" solo es bueno si hay valores predeterminados razonables y fáciles de usar. Si algo es flexible pero necesita 20 líneas aquí y allá para que funcione, no lo considero una victoria ...
TWiStErRob
1
@TWiStErRob Estoy de acuerdo. El énfasis es suyo, no mío :)
matiash
66
@TWiStErRob Siento lo mismo ... Mejor cuidado con Google, este tipo de actividad me recuerda al viejo Microsoft
Sauron
13

Parece que agregaron una nueva clase llamada android.widget.Toolbarque se extiende ViewGroup. También agregaron un nuevo método setActionBar(Toolbar)en Activity. No he probado todavía, pero parece que se puede envolver todo tipo de TabWidgets, Spinnerso vistas personalizadas en una Toolbary utilizarlo como su barra de acción.

Kuno
fuente
1
¿Alguien puede compartir si ha intentado algo con el widget de la barra de herramientas o sabe cómo está destinado a funcionar? ¿También está incluido en el paquete de compatibilidad?
Sandra
Eche un vistazo a plus.google.com/+IanLake/posts/…
Kuno
1
Muchas gracias por el enlace ... así que ahora si quiero desarrollar una aplicación que esté de acuerdo con las nuevas pautas de material, probablemente debería esperar a que la barra de herramientas esté disponible, porque si uso la barra de acción estaría usando todo eso está en desuso ..?
Sandra
1
La ActionBar seguirá siendo un patrón de diseño estándar. Solo los modos de navegación quedarán en desuso (Pestañas o Spinner). Ver developer.android.com/guide/topics/ui/actionbar.html#Tabs y developer.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno
1
Creo que está relacionado con la pregunta ... el nuevo apk de la aplicación i / o 2014 está disponible para descargar, y como puede ver en plus.google.com/+RomanNurik/posts/PD6MS3feXTT , se utilizan muchos estilos de barra de herramientas . Solo tenemos que esperar el código fuente y explorarlo luego :(
Sandra
4

Lo nuevo Toolbarno se puede usar para inflar varios objetos de línea, por lo que es imposible agregarle pestañas.
Si desea usar un Toolbarlike a TabWidget, puede insertar algunos objetos Tab, pero solo con el viejo estilo Holo.

Aquí hay una biblioteca personalizada que usa v7 Toolbarcomo TabWidgetcon las nuevas animaciones de diseño de materiales, pero usa los mismos métodos de los antiguos ActionBar Tabs, por lo que puede adjuntarla ViewPagera ella.

NeoKree
fuente
3

Para el 'reemplazo' de ActionBar en desuso, cambié el tipo de mis variables de tipo ActionBar a PagerTabStrip, según (código antiguo en el comentario):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

Un 'reemplazo' para el .selectTab (tabindex) de ~ actionBar fue usar el método .setCurrentItem (int) de ViewPager asociado, como este (código antiguo en el comentario):

/*
ActionBar.Tab eventTab = bigActionBar.getTabAt(2);
bigActionBar.selectTab(eventTab);
*/
mViewPager.setCurrentItem(2);

Espero que esto sea útil.

compota de manzana
fuente
1

Tuve el mismo problema y esta solución me fue muy bien:

En el archivo xml de diseño que contiene el visor, agregue un PagerTabStrip como se muestra:

<android.support.v4.view.PagerTabStrip
    android:id="@+id/pager_tab_strip"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"
    android:background="#996633"
    android:textColor="#CCCCCC"
    android:paddingTop="5dp"
    android:paddingBottom="5dp" />

Para controlar los títulos de las páginas, agregue una declaración de cambio a su archivo ViewPager:

@Override
public CharSequence getPageTitle(int position)
{
    switch (position)
    {
    case 0:
        return "Page 1";

    case 1:
        return "Page 2";

    case 2:
        return "Page 3";

    }

    return null;
}
AR Ross
fuente
0

FragmentTabHost también es una opción.

Este código es del sitio del desarrollador de Android:

/**
 * This demonstrates how you can implement switching between the tabs of a
 * TabHost through fragments, using FragmentTabHost.
 */
public class FragmentTabs extends FragmentActivity {
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.fragment_tabs);
    mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
    mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

    mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"),
            FragmentStackSupport.CountingFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
            LoaderCursorSupport.CursorLoaderListFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),
            LoaderCustomSupport.AppListFragment.class, null);
    mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),
            LoaderThrottleSupport.ThrottledLoaderListFragment.class, null);
    }
}
Anuj
fuente
1
Aquí hay un tutorial que incluye esta respuesta, por lo que podría ayudar a alguien skholingua.com/android-basic/user-interface/compositeitems/…
Dejan
0

Estos tutoriales me resultaron útiles al armar una barra de acción (ahora la 'barra de herramientas' - argh) que admite pestañas deslizantes con Material Design:

https://www.youtube.com/watch?v=Fl0xMuo10yA

http://www.exoguru.com/android/material-design/navigation/android-sliding-tabs-with-material-design.html

Tiene que sintetizar estos recursos para que coincida con su situación particular. Por ejemplo, es posible que no desee crear manualmente las pestañas en el mismo estilo que lo hizo el tutorial de exoguru.com.

kip2
fuente
El segundo enlace está muerto.
jcaruso
@jcaruso no es mi culpa ya que ese dominio parece estar caducado. Sin embargo
kip2 el
1
@ kip2 Estoy de acuerdo, no es tu culpa. Sin embargo, sugiero como todos sugieren, evite usar enlaces para explicar las respuestas debido a este problema.
jcaruso
0

Bueno, para mí manejar la barra de herramientas de navegación en desuso utilizando el widget de barra de herramientas v7 appcompat.

    setSupportActionBar(toolbar);
    getSupportActionBar().setSubtitle("Feed Detail");
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //goToWhere
        }
    });
Desarrollador novato
fuente
0

Creo que un reemplazo adecuado para cuando tiene tres o cinco pantallas de igual importancia es la Actividad de navegación inferior, esto se puede usar para cambiar fragmentos.

Notará que existe un asistente para esto en Android Studio, tenga cuidado, ya que Android Studio tiende a producir un código de placa de caldera demasiado complejo.

Puede encontrar un tutorial aquí: https://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

Puede encontrar otro tutorial de calidad en Android Hive aquí: https://www.androidhive.info/2017/12/android-working-with-bottom-navigation/

Andrew S
fuente