Le modalità di navigazione della barra delle azioni sono obsolete in Android L


203

Dando un'occhiata al rapporto diff API per l'anteprima "L" di Android, vedo che tutti i metodi relativi alle modalità di navigazione nel ActionBar classe (ad esempio setNavigationMode(), addTab(),selectTab() , ecc). ora sono deprecati.

La documentazione spiega:

Le modalità di navigazione della barra delle azioni sono obsolete e non supportate dalle barre delle azioni della barra degli strumenti incorporate. Prendi invece in considerazione l'utilizzo di altri schemi di navigazione comuni.

Qual è la supposta sostituzione?

Inoltre, le "barre delle azioni della barra degli strumenti incorporate" sono un nuovo concetto? Non credo di averne sentito parlare prima.


Dove hai trovato i documenti per l'anteprima di L?
Kuno,

8
@KlassenK Non è ancora integrato nella documentazione principale, ma è possibile scaricarlo da developer.android.com/preview/reference.html
matiash

Grazie per il link ai documenti!
Robert Karl,

Per setNavigationList cosa hai usato
Lion789

1
@ShirishHerwade Sì, perché è stato unito alla documentazione principale quando è stato rilasciato Android 5.0. In ogni caso, ora puoi trovare l'avviso di
ammortamento

Risposte:


179

La nuova libreria di supporto per la progettazione di Android aggiunge TabLayout , fornendo un'implementazione delle schede che corrisponde alle linee guida sulla progettazione dei materiali per le schede . Una panoramica completa di come implementare le schede e ViewPagerpuò essere trovata in questo video

Ora deprecato: La PagerTabStrip è parte della libreria di supporto (ed è stato per qualche tempo) e serve come una sostituzione diretta. Se preferisci le schede di stile Google Play più recenti, puoi utilizzare la libreria PagerSlidingTabStrip o modificare uno degli esempi forniti da Google SlidingTabsBasic o SlidingTabsColors come spiegato in questo video Dev Bytes .


8
Si tratta di una sostituzione diretta in modalità verticale, con il vantaggio di semplificare l'utilizzo di un'intestazione estesa di tipo Materiale. Tuttavia, in modalità orizzontale le schede ActionBar si spostano automaticamente nella barra delle azioni stessa, liberando un'area dello schermo importante. Qualcuno conosce un modo pulito per gestirlo con la libreria di supporto?
ehartwell,

9
Il documento dello sviluppatore dice ancora usando la scheda della barra delle azioni. Simlpy non ancora aggiornato? developer.android.com/training/implementing-navigation/…
Romulus Urakagi Ts'ai

3
Questo è un sostituto di NAVIGATION_MODE_TABS ma non di NAVIGATION_MODE_LIST: /
Geob-o-matic

2
@Geobert - NAVIGATION_MODE_LISTè molto più semplice, dato che tutto ciò che ha fatto è stato aggiungere uno Spinner e alcuni aiutanti di callback.
ianhanniballake,

2
A cosa serve la sostituzione NAVIGATION_MODE_LIST? Il mio lo elenca come deprecato ...
Sauron,

20

Ora che sono disponibili i documenti Android 5.0, abbiamo la documentazione ufficiale per il widget Toolbar :

Una barra degli strumenti standard da utilizzare nel contenuto dell'applicazione.

Una barra degli strumenti è una generalizzazione delle barre delle azioni da utilizzare all'interno dei layout dell'applicazione. Mentre una barra delle azioni è tradizionalmente parte della decorazione opaca della finestra di un'attività controllata dal framework, una barra degli strumenti può essere posizionata a qualsiasi livello arbitrario di annidamento all'interno di una gerarchia di viste .

Un Toolbarwidget può essere utilizzato anche per sostituire la barra delle azioni:

Un'applicazione può scegliere di designare una barra degli strumenti come barra delle azioni per un'attività utilizzando il setActionBar()metodo.

La deprecazione delle schede nella barra delle azioni è probabilmente dovuta a ciò, poiché le barre degli strumenti non possono contenere le schede stesse.

Inoltre, è disponibile per le versioni precedenti di Android tramite la libreria appcompat. Vedi questo post di Chris Banes per maggiori informazioni. Un estratto:

Android 5.0 introduce un nuovo widget Toolbar. Questa è una generalizzazione del modello ActionBar ma ti dà molto più controllo e flessibilità nell'usarlo. Toolbar è una vista nella tua gerarchia come qualsiasi altra, che semplifica l'interlacciamento con il resto delle viste, l'animazione, la reazione agli eventi di scorrimento.


53
"molto più controllo e flessibilità" è utile solo se esistono impostazioni predefinite ragionevoli e facili da usare. Se qualcosa è flessibile ma hai bisogno di 20 righe qua e là per farlo funzionare, non lo considero una vittoria ...
TWiStErRob

1
@TWiStErRob Sono d'accordo. Sottolinea il suo, non il mio :)
matiash,

6
@TWiStErRob Mi sento allo stesso modo ... Google, fai attenzione, questo tipo di attività mi ricorda il vecchio Microsoft
Sauron,

13

Sembra che abbiano aggiunto una nuova classe denominata android.widget.Toolbarche si estende ViewGroup. Inoltre hanno aggiunto un nuovo metodo setActionBar(Toolbar)in Activity. Non ho ancora provato, ma sembra che si può avvolgere tutti i tipi di TabWidgets, Spinnerso visualizzazioni personalizzate in una Toolbare utilizzarlo come ActionBar.


1
Qualcuno può condividere se ha provato qualcosa con il widget Toolbar o sa come dovrebbe funzionare. Inoltre è incluso nel pacchetto di compatibilità?
Sandra,


1
Grazie mille per il link ... quindi ora se voglio sviluppare un'app che sia conforme alle nuove linee guida sui materiali, probabilmente dovrei aspettare che la barra degli strumenti diventi disponibile, perché se uso la barra delle azioni userei tutto che è deprecato ..?
Sandra,

1
ActionBar continuerà a essere un modello di progettazione standard. Solo le modalità di navigazione saranno deprecate (Tab o Spinner). Vedi developer.android.com/guide/topics/ui/actionbar.html#Tabs e developer.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno

1
Penso che sia correlato alla domanda .. l'apk della nuova applicazione i / o 2014 è disponibile per il download e, come puoi vedere da plus.google.com/+RomanNurik/posts/PD6MS3feXTT , ci sono molti stili di barre degli strumenti utilizzati . Non ci resta che attendere il codice sorgente ed esplorarlo quindi :(
Sandra,

4

Il nuovo Toolbarnon può essere utilizzato per gonfiare più oggetti linea, quindi è impossibile aggiungere schede.
Se si desidera utilizzare un Toolbarlike a, TabWidgetè possibile inserire alcuni oggetti Tab, ma solo con il vecchio stile Holo.

Qui c'è una libreria personalizzata che usa v7 Toolbarcome TabWidgetcon le nuove animazioni di Material Design, ma usa gli stessi metodi del vecchio ActionBar Tabs, quindi puoi collegarti ViewPagerad esso.


3

Per "sostituzione" di ActionBar obsoleto, ho modificato il tipo delle mie variabili di tipo ActionBar in PagerTabStrip, come da (vecchio codice nel commento):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

Una "sostituzione" per .selectTab (tabindex) di ~ actionBar è stata quella di utilizzare il metodo .setCurrentItem (int) del mio ViewPager associato, come questo (vecchio codice nel commento):

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

Spero sia utile.


1

Ho avuto lo stesso problema e questa soluzione mi andava benissimo:

Nel file xml di layout che contiene il viewpager, aggiungi un PagerTabStrip come mostrato:

<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" />

Per controllare i titoli delle pagine, aggiungi un'istruzione switch al tuo file 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;
}

0

FragmentTabHost è anche un'opzione.

Questo codice proviene dal sito dello sviluppatore 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);
    }
}

1
Ecco un tutorial che include questa risposta, quindi potrebbe aiutare qualcuno skholingua.com/android-basic/user-interface/compositeitems/…
Dejan,

0

Ho trovato utili questi tutorial mentre componevo una barra delle azioni (ora la 'barra degli strumenti' - argh) che supporta le schede scorrevoli 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

È necessario sintetizzare queste risorse in base alla propria situazione particolare. Ad esempio, potresti non voler creare manualmente le schede nello stesso stile del tutorial di exoguru.com.


Il secondo collegamento è morto.
jcaruso,

@jcaruso non è colpa mia in quanto quel dominio sembra essere scaduto. Il video di YouTube è comunque rilevante
kip2

1
@ kip2 Sono d'accordo, non è colpa tua. Tuttavia, suggerisco come suggeriscono tutti, evitare di utilizzare i collegamenti per spiegare le risposte a causa di questo problema.
jcaruso,

0

Bene per me gestire la barra degli strumenti di navigazione obsoleta utilizzando la barra degli strumenti v7 widget appcompat.

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

0

Penso che un sostituto adatto per quando hai da tre a cinque schermate di uguale importanza sia BottomNavigationActivity, questo può essere usato per cambiare frammento.

Noterai che esiste una procedura guidata per questo in Android Studio, ma fai attenzione perché Android Studio ha la tendenza a produrre un codice della piastra della caldaia troppo complesso.

Un tutorial può essere trovato qui: https://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

Un altro tutorial di qualità può essere trovato su Android Hive qui: https://www.androidhive.info/2017/12/android-working-with-bottom-navigation/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.