Os modos de navegação da barra de ação foram descontinuados no Android L

203

Dando uma olhada no relatório diff API para o Android preview "L", vejo que todos os métodos relacionados com modos de navegação na ActionBarclasse (como setNavigationMode(), addTab(), selectTab(), & c). agora estão obsoletos.

A documentação explica:

Os modos de navegação da barra de ação foram descontinuados e não são suportados pelas barras de ação da barra de ferramentas em linha. Considere usar outros padrões de navegação comuns.

Qual é a suposta substituição?

Além disso, as "barras de ação em linha da barra de ferramentas" são um novo conceito? Acho que nunca ouvi falar disso antes.

matiash
fonte
Onde você encontrou os documentos da L Preview?
Kuno
8
@KlassenK Ainda não está integrado na documentação principal, mas você pode baixá-lo a partir developer.android.com/preview/reference.html
matiash
Obrigado pelo link para a documentação!
Robert Karl
Para setNavigationList o que você usou
Lion789
1
@ShirishHerwade Sim, porque foi mesclado na documentação principal quando o Android 5.0 foi lançado. De qualquer forma, agora você pode encontrar o aviso de descontinuação em developer.android.com/reference/android/app/…
matiash

Respostas:

179

A nova Biblioteca de suporte ao design do Android adiciona o TabLayout , fornecendo uma implementação de guia que corresponde às diretrizes de design do material para as guias . Uma explicação completa de como implementar guias e ViewPagerpode ser encontrada neste vídeo

Agora descontinuado: O PagerTabStrip faz parte da biblioteca de suporte (e já faz algum tempo) e serve como um substituto direto. Se você preferir as guias de estilo mais recentes do Google Play, poderá usar a biblioteca PagerSlidingTabStrip ou modificar um dos exemplos fornecidos pelo Google SlidingTabsBasic ou SlidingTabsColors, conforme explicado neste vídeo de Dev Bytes .

ianhanniballake
fonte
8
Esta é uma substituição direta no modo retrato, com o bônus de facilitar o uso de um cabeçalho estendido do tipo Material. No entanto, no modo paisagem, as guias do ActionBar avançam automaticamente para a própria barra de ação, liberando importante área da tela. Alguém conhece uma maneira limpa de gerenciar isso com a biblioteca de suporte?
ehartwell
9
O documento do desenvolvedor ainda diz usando a guia Barra de ação. Simlpy ainda não foi atualizado? developer.android.com/training/implementing-navigation/…
Romulus Urakagi Ts'ai
3
Este é um substituto para NAVIGATION_MODE_TABS, mas não para NAVIGATION_MODE_LIST: /
Geob-o-matic
2
@ Geobert - NAVIGATION_MODE_LISTé muito mais fácil, já que tudo o que fizemos foi adicionar um Spinner e alguns auxiliares de retorno de chamada.
Ianhanniballake #
2
Qual é o substituto NAVIGATION_MODE_LIST? Mina lista como obsoleto ...
Sauron
20

Agora que os documentos do Android 5.0 estão disponíveis, temos a documentação oficial do widget Barra de ferramentas :

Uma barra de ferramentas padrão para uso no conteúdo do aplicativo.

Uma barra de ferramentas é uma generalização de barras de ação para uso em layouts de aplicativos. Enquanto uma barra de ação é tradicionalmente parte da decoração opaca da janela de uma Atividade controlada pela estrutura, uma Barra de Ferramentas pode ser colocada em qualquer nível arbitrário de aninhamento em uma hierarquia de exibição .

Um Toolbarwidget também pode ser usado para substituir a barra de ação:

Um aplicativo pode optar por designar uma barra de ferramentas como a barra de ação de uma atividade usando o setActionBar()método

A descontinuação de guias na barra de ação deve-se provavelmente a isso, pois as barras de ferramentas não podem conter as próprias guias.

Além disso, está disponível para versões anteriores do Android na biblioteca appcompat. Veja este post de Chris Banes para mais informações. Um trecho:

O Android 5.0 apresenta um novo widget da barra de ferramentas. Essa é uma generalização do padrão ActionBar, mas oferece muito mais controle e flexibilidade ao usá-lo. A barra de ferramentas é uma visualização em sua hierarquia como qualquer outra, facilitando a intercalação com o restante das visualizações, a animação e a reação aos eventos de rolagem.

matiash
fonte
53
"muito mais controle e flexibilidade" só é bom se houver padrões sensíveis e fáceis de usar. Se algo é flexível, mas você precisa de 20 linhas aqui e ali para fazê-lo funcionar, eu não considero uma vitória ...
TWiStErRob
1
@TWiStErRob Concordo. Ênfase dele, não meu :)
matiash
6
@TWiStErRob eu me sinto da mesma maneira ... Google melhor tomar cuidado, este tipo de atividade está me lembrando do antigo Microsoft
Sauron
13

Parece que eles adicionaram uma nova classe chamada android.widget.Toolbarque se estende ViewGroup. Eles também adicionaram um novo método setActionBar(Toolbar)no Activity. Eu não testei ainda, mas parece que você pode quebrar todos os tipos de TabWidgets, Spinnersou vistas personalizadas em um Toolbare usá-lo como seu ActionBar.

Kuno
fonte
1
Alguém pode compartilhar se tentou algo com o widget Barra de Ferramentas ou sabe como ele deve funcionar. Também está incluído no pacote de compatibilidade?
1128 Sandra
Dê uma olhada em plus.google.com/+IanLake/posts/…
Kuno
1
Muito obrigado pelo link .. agora, se eu quiser desenvolver um aplicativo que esteja de acordo com as novas diretrizes de materiais, provavelmente devo esperar que a barra de ferramentas fique disponível, porque, se eu usar a barra de ação, estaria usando tudo que está obsoleto ..?
1628 Sandra
1
O ActionBar ainda será um padrão de design padrão. Somente os modos de navegação serão descontinuados (Guias ou Spinner). Consulte developer.android.com/guide/topics/ui/actionbar.html#Tabs e developer.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno
1
Eu acho que isso está relacionado à questão. O apk do novo aplicativo de E / S 2014 está disponível para download e, como você pode ver em plus.google.com/+RomanNurik/posts/PD6MS3feXTT , existem muitos estilos de barra de ferramentas usados . Nós apenas temos que esperar pelo código fonte e, depois, explorá-lo :(
Sandra
4

O novo Toolbarnão pode ser usado para inflar vários objetos de linha; portanto, é impossível adicionar guias a ele.
Se você quiser usar o Toolbarlike a, TabWidgetpoderá inserir alguns Objetos de Tabulação, mas apenas com o antigo estilo Holo.

Aqui há uma biblioteca personalizada que usa a v7 Toolbarcomo TabWidgetnas novas animações de design de material, mas usa os mesmos métodos da antiga ActionBar Tabs, para que você possa anexá ViewPager-la a ela.

NeoKree
fonte
3

Para 'substituição' do ActionBar obsoleto, alterei o tipo de minhas variáveis ​​do tipo ActionBar para PagerTabStrip, conforme (código antigo no comentário):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

Um 'substituto' para o .selectTab (tabindex) do ~ actionBar era usar o método .setCurrentItem (int) do ViewPager associado, como este (código antigo no comentário):

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

Espero que isso seja útil.

maçãs
fonte
1

Eu tive o mesmo problema e esta solução me serviu bastante:

No arquivo xml de layout que contém o viewpager, adicione um PagerTabStrip como mostrado:

<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 os títulos das páginas, adicione uma instrução switch ao seu arquivo 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
fonte
0

FragmentTabHost também é uma opção.

Este código é do site do desenvolvedor do 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
fonte
1
Aqui está um tutorial que inclui esta resposta, por isso pode ajudar alguém skholingua.com/android-basic/user-interface/compositeitems/...
Dejan
0

Achei esses tutoriais úteis ao montar uma barra de ação (agora a 'barra de ferramentas' - argh) que suporta guias deslizantes com o Material Design:

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

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

Você meio que precisa sintetizar esses recursos para corresponder à sua situação específica. Por exemplo, você pode não querer criar manualmente as guias no mesmo estilo que o tutorial do exoguru.com.

kip2
fonte
O segundo link está morto.
jcaruso
@ jcaruso não é minha culpa, pois esse domínio parece ter expirado. O vídeo do YouTube ainda é, porém relevante
kip2
1
@ kip2 Eu concordo, não é sua culpa. No entanto, sugiro, como todos sugerem, que evite usar links para explicar as respostas devido a esse problema.
jcaruso
0

Bem, para eu lidar com a barra de ferramentas de navegação obsoleta usando o widget da barra de ferramentas v7 appcompat.

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

Acho que um substituto adequado para quando você tem três a cinco telas de igual importância é o BottomNavigationActivity, que pode ser usado para alternar fragmentos.

Você notará que existe um assistente para isso no Android Studio, mas tome cuidado, pois o Android Studio tende a produzir código de placa da caldeira excessivamente complexo.

Um tutorial pode ser encontrado aqui: https://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

Outro tutorial de qualidade pode ser encontrado no Android Hive aqui: https://www.androidhive.info/2017/12/android-working-with-bottom-navigation/

Andrew S
fonte