Tryby nawigacji na pasku akcji są nieaktualne w systemie Android L.


203

Przyjrzeniu raportu diff API dla Androida „L” podglądu, widzę, że wszystkie metody związane z trybów nawigacji w ActionBarklasie (takich jak setNavigationMode(), addTab(), selectTab(), & c). są teraz przestarzałe.

Dokumentacja wyjaśnia:

Tryby nawigacji na pasku działań są przestarzałe i nie są obsługiwane przez wbudowane paski działań paska narzędzi. Zastanów się nad użyciem innych typowych wzorców nawigacji.

Jaki jest rzekomy zamiennik?

Czy „wbudowane paski akcji paska narzędzi” to nowa koncepcja? Chyba nie słyszałem o tym wcześniej.


Gdzie znalazłeś dokumenty do podglądu L?
Kuno

8
@KlassenK Nie jest jeszcze zintegrowany z główną dokumentacją, ale można go pobrać ze strony developer.android.com/preview/reference.html
matiash

Dzięki za link do dokumentów!
Robert Karl

W przypadku setNavigationList, czego użyłeś
Lion789

1
@ShirishHerwade Tak, ponieważ został on włączony do głównej dokumentacji po wydaniu Androida 5.0. W każdym razie możesz teraz znaleźć informację o wycofaniu w developer.android.com/reference/android/app/…
matiash

Odpowiedzi:


179

Nowa biblioteka wsparcia projektowania systemu Android dodaje TabLayout , zapewniając implementację zakładek zgodną z wytycznymi projektowania materiałów dla kart . Kompletny przewodnik na temat implementacji Tabs ViewPagermożna znaleźć w tym filmie

Teraz przestarzałe: PagerTabStrip jest częścią biblioteki wsparcia (i był przez pewien czas) i służy jako bezpośredni zamiennik. Jeśli wolisz nowsze karty stylu Google Play, możesz użyć biblioteki PagerSlidingTabStrip lub zmodyfikować jeden z podanych przez Google przykładów SlidingTabsBasic lub SlidingTabsColors, jak wyjaśniono w tym filmie Dev Bytes .


8
Jest to bezpośrednie zastąpienie w trybie pionowym, z dodatkową zaletą ułatwiającą korzystanie z rozszerzonego nagłówka typu materiałowego. Jednak w trybie poziomym karty ActionBar automatycznie przesuwają się w górę do samego paska akcji, uwalniając ważny obszar ekranu. Czy ktoś zna czysty sposób na zarządzanie tym dzięki bibliotece pomocy?
ehartwell

9
Dokument programisty nadal mówi o użyciu karty Pasek działań. Simlpy jeszcze nie zaktualizowany? developer.android.com/training/implementing-navigation/…
Romulus Urakagi Ts'ai

3
Jest to zamiennik NAVIGATION_MODE_TABS, ale nie NAVIGATION_MODE_LIST: /
Geob-o-matic

2
@Geobert - NAVIGATION_MODE_LISTjest znacznie łatwiejszy, biorąc pod uwagę, że wystarczyło dodać Spinnera i kilka pomocników oddzwaniania.
ianhanniballake

2
Co to jest zamiennik NAVIGATION_MODE_LIST? Mój uważa to za przestarzałe ...
Sauron,

20

Teraz, gdy dokumenty Android 5.0 są dostępne, mamy oficjalną dokumentację widżetu paska narzędzi Toolbar :

Standardowy pasek narzędzi do użytku w treści aplikacji.

Pasek narzędzi to uogólnienie pasków akcji do użytku w układach aplikacji. Podczas gdy pasek akcji jest tradycyjnie częścią nieprzezroczystej dekoracji okna działania kontrolowanej przez ramę, pasek narzędzi może być umieszczony na dowolnym dowolnym poziomie zagnieżdżenia w hierarchii widoku .

ToolbarWidget może być również stosowany w celu zastąpienia pasek działań:

Aplikacja może zdecydować o wyznaczeniu paska narzędzi jako paska akcji dla działania przy użyciu tej setActionBar()metody.

Przestarzałe tabulatory na pasku akcji są najprawdopodobniej z tego powodu, ponieważ paski narzędzi nie mogą same zawierać tabulatorów.

Jest także dostępny dla poprzednich wersji Androida za pośrednictwem biblioteki appcompat. Aby uzyskać więcej informacji, zobacz ten post Chris Banes . Fragment:

Android 5.0 wprowadza nowy widget Toolbar. Jest to uogólnienie wzorca ActionBar, ale daje znacznie większą kontrolę i elastyczność w jego stosowaniu. Pasek narzędzi to widok w Twojej hierarchii, tak jak każdy inny, ułatwiający przeplatanie się z resztą twoich widoków, animowanie, reagowanie na zdarzenia przewijania.


53
„znacznie większa kontrola i elastyczność” jest przydatna tylko wtedy, gdy istnieją rozsądne i łatwe w użyciu ustawienia domyślne. Jeśli coś jest elastyczne, ale potrzebujesz 20 linii tu i tam, aby to działało, nie uważam, że to wygrana ...
TWiStErRob

1
@TWiStErRob Zgadzam się. Podkreśl jego, nie mój :)
matiash

6
@TWiStErRob Czuję to samo, co ... Google lepiej uważaj, ten rodzaj aktywności przypomina mi starego Microsoftu
Sauron

13

Wygląda na to, że dodali nową android.widget.Toolbar, rozszerzoną klasę ViewGroup. Dodali także nową metodę setActionBar(Toolbar)w Activity. Nie testowałem go jeszcze, ale wygląda na to, można owinąć wszelkiego rodzaju TabWidgets, Spinnerslub niestandardowe widoki na Toolbari używać go jako Actionbar.


1
Czy ktoś może udostępnić, jeśli wypróbował coś z widżetem paska narzędzi Toolbar lub wie, jak to działa. Czy jest to również zawarte w pakiecie kompatybilności?
Sandra,


1
Dziękuję bardzo za link .. więc teraz, jeśli chcę opracować aplikację, która byłaby zgodna z nowymi wytycznymi materiałowymi, prawdopodobnie powinnam poczekać, aż pasek narzędzi stanie się dostępny, ponieważ jeśli użyję paska akcji, użyłbym wszystkiego to jest przestarzałe ..?
Sandra

1
Pasek ActionBar nadal będzie standardowym wzorcem projektowym. Tylko tryby nawigacji będą przestarzałe (Tabs lub Spinner). Zobacz developer.android.com/guide/topics/ui/actionbar.html#Tabs i developer.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno

1
Myślę, że jest to związane z pytaniem .. apk nowej aplikacji we / wy 2014 jest dostępny do pobrania, a jak widać na stronie plus.google.com/+RomanNurik/posts/PD6MS3feXTT , istnieje wiele używanych stylów paska narzędzi . Musimy tylko poczekać na kod źródłowy, a następnie go zbadać :(
Sandra

4

Nowy Toolbarnie może być używany do nadmuchiwania wielu obiektów linii, więc nie można do niego dodawać Tab.
Jeśli chcesz użyć Toolbarpodobnego do a TabWidget, możesz wstawić do niego obiekty Tab, ale tylko w starym stylu Holo.

Oto niestandardowa biblioteka, która używa v7, Toolbarpodobnie jak TabWidgetnowe animacje Material Design, ale używa tych samych metod, co stare ActionBar Tabs, więc możesz ViewPagerdo niej dołączyć .


3

Aby „zastąpić” przestarzałe ActionBar, zmieniłem typ moich zmiennych typu ActionBar na PagerTabStrip, zgodnie z (stary kod w komentarzu):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

„Zastąpienie” .selectTab (tabindex) ~ actionBar polegało na użyciu metody .setCurrentItem (int) mojego powiązanego z ViewPager, podobnie jak ten (stary kod w komentarzu):

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

Mam nadzieję, że to jest pomocne.


1

Miałem ten sam problem i to rozwiązanie bardzo mi odpowiadało:

W pliku xml układu, który zawiera przeglądarkę, dodaj PagerTabStrip, jak pokazano:

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

Aby kontrolować tytuły stron, dodaj instrukcję switch do pliku 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 jest również opcją.

Ten kod pochodzi ze strony programisty Androida:

/**
 * 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
Oto samouczek, który zawiera tę odpowiedź, więc może pomóc komuś skholingua.com/android-basic/user-interface/compositeitems/…
Dejan

0

Uważam, że te samouczki są pomocne podczas tworzenia paska akcji (teraz „pasek narzędzi” - argh), który obsługuje przesuwane zakładki w Material Design:

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

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

Musisz zsyntetyzować te zasoby, aby dopasować je do konkretnej sytuacji. Na przykład możesz nie chcieć ręcznie tworzyć zakładek w tym samym stylu, co samouczek exoguru.com.


Drugi link jest martwy.
jcaruso

@jcaruso to nie moja wina, ponieważ domena wydaje się wygasać.
Filmy z

1
@ kip2 Zgadzam się, to nie twoja wina. Sugeruję jednak, jak sugerują wszyscy, unikaj używania linków do wyjaśniania odpowiedzi z powodu tego problemu.
jcaruso

0

Dobrze, że mogę obsługiwać przestarzały pasek narzędzi nawigacyjnych za pomocą paska narzędzi appcompat v7 widget.

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

0

Myślę, że odpowiednim zamiennikiem, gdy masz trzy do pięciu ekranów o równym znaczeniu, jest BottomNavigationActivity, można go użyć do przełączania fragmentów.

Zauważysz, że istnieje w tym celu kreator w Android Studio, uważaj jednak, ponieważ Android Studio ma tendencję do tworzenia zbyt skomplikowanego kodu płyty kotłowej.

Samouczek można znaleźć tutaj: https://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

Kolejny poradnik jakości można znaleźć na Android Hive tutaj: https://www.androidhive.info/2017/12/android-working-w--ottott-navigation/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.