Tryby nawigacji na pasku akcji są przestarzałe w Androidzie L

Patrząc na raport API diff dla Androida " L " preview, widzę, że wszystkie metody związane z trybami nawigacji w klasie ActionBar (takie jak setNavigationMode(), addTab(), selectTab(), &c). są obecnie przestarzałe.

Dokumentacja wyjaśnia:

Tryby nawigacji na pasku akcji są przestarzałe i nie są obsługiwane przez wbudowane paski akcji paska narzędzi. Rozważ użycie innych popularnych wzorców nawigacji zamiast tego.

Jaki jest domniemany zamiennik?

Również, jest " inline toolbar action bars " nowa koncepcja? Chyba nie słyszałem o tym wcześniej.

Author: matiash, 2014-06-29

10 answers

Nowa biblioteka Android Design Support Library dodaje TabLayout , zapewniając implementację tabulatorów zgodną z wytycznymi projektowymi materiałów dla tabulatorów . Kompletny przegląd jak zaimplementować karty i ViewPager można znaleźć w ten film

Obecnie przestarzały: PagerTabStrip jest częścią biblioteki wsparcia (i jest od jakiegoś czasu) i służy jako bezpośredni zamiennik. Jeśli wolisz Nowsze karty stylu Google Play, możesz użyć biblioteka PagerSlidingTabStrip lub zmodyfikować jeden z podanych przez Google przykładów SlidingTabsBasic lub SlidingTabsColors Jak wyjaśniono w tym Dev bajtów wideo .

 176
Author: ianhanniballake,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-07 03:35:14

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

Standardowy pasek narzędzi do użycia w zawartości aplikacji.

Pasek narzędzi jest uogólnieniem pasków akcji do użycia w układy aplikacji. podczas gdy pasek akcji jest tradycyjnie częścią Nieprzezroczysty wystrój okna kontrolowany przez framework, pasek narzędzi może być umieszczony na dowolnym poziomie zagnieżdżenia w widoku hierarchia .

Widżet Toolbar może być również użyty do zastąpienia paska akcji:

Aplikacja może wyznaczyć pasek narzędzi jako pasek akcji dla działanie przy użyciu metody setActionBar().

Dezaktualizacja kart na pasku akcji jest najprawdopodobniej spowodowana tym, że paski narzędzi nie mogą zawierać tabulatorów.

Jest również dostępny dla poprzednich wersji Androida za pośrednictwem biblioteki appcompat. Zobacz ten post przez Chris Banes aby dowiedzieć się więcej informacje. Fragment:

Android 5.0 wprowadza nowy widżet paska narzędzi. Jest to uogólnienie wzorca ActionBar, ale daje dużo większą kontrolę i elastyczność w korzystaniu z niego. Toolbar to widok w Twojej hierarchii tak jak wszelkie inne, co ułatwia przeplatanie się z resztą swoich poglądów, animować, reagować na zdarzenia przewijania.

 20
Author: matiash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 13:50:32

Wygląda na to, że dodali nową klasę o nazwie android.widget.Toolbar, która rozszerza ViewGroup. Dodali również nową metodę setActionBar(Toolbar) w Activity. Jeszcze tego nie testowałem, ale wygląda na to, że możesz zapakować wszystkie rodzaje TabWidgets, Spinners lub niestandardowe widoki do Toolbar i użyj go jako paska akcji.

 13
Author: Kuno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-29 16:07:15

Nowy Toolbar nie może być używany do nadmuchiwania wielu obiektów liniowych, więc nie można dodawać do niego tabulatorów.
Jeśli chcesz użyć Toolbar jak TabWidget, możesz wstawić do niego niektóre obiekty tabulacji, ale tylko ze starym stylem Holo.

Tutaj {[13] } znajduje się niestandardowa biblioteka, która używa v7 Toolbar jak {[2] } z nowymi animacjami projektu materiału, ale używa tych samych metod ze starego ActionBar Tabs, więc możesz do niej dołączyć swoje ViewPager.

 4
Author: NeoKree,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 09:47:19

Dla "zastąpienia" przestarzałego ActionBar, zmieniłem Typ moich zmiennych typu ActionBar na PagerTabStrip, zgodnie z (stary kod w komentarzu):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

'zamiennik' dla ~actionBar ' s .selectTab (tabindex) miał używać mojego skojarzonego Viewpagera .metoda setCurrentItem (int), jak ta (stary kod w komentarzu):

/*
ActionBar.Tab eventTab = bigActionBar.getTabAt(2);
bigActionBar.selectTab(eventTab);
*/
mViewPager.setCurrentItem(2);
Mam nadzieję, że to pomoże.
 2
Author: applesauced,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-16 02:59:50

Miałem ten sam problem i to rozwiązanie całkiem mi pasowało:

W pliku XML układu, który zawiera viewpager, 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;
}
 1
Author: AR Ross,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-04 15:07:38

FragmentTabHost jest również opcją.

Ten kod pochodzi ze strony dewelopera 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);
    }
}
 0
Author: Anuj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-02 06:06:43

Te samouczki okazały się pomocne podczas tworzenia paska akcji (teraz 'pasek narzędzi' - argh), który obsługuje przesuwane zakładki z 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 pasowały do twojej konkretnej sytuacji. Na przykład ręczne tworzenie kart może nie być konieczne w tym samym stylu, co exoguru.com tutorial zrobił.

 0
Author: kip2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-27 16:24:34

Dobrze dla mnie do obsługi przestarzałego paska narzędzi nawigacji za pomocą paska narzędzi v7 widget appcompat.

    setSupportActionBar(toolbar);
    getSupportActionBar().setSubtitle("Feed Detail");
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //goToWhere
        }
    });
 0
Author: Newbie Developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 03:53:22

Myślę, że odpowiednim zamiennikiem gdy masz od trzech do pięciu ekranów o takim samym znaczeniu jest BottomNavigationActivity,można go użyć do zamiany fragmentów.

Zauważysz, że w Android Studio istnieje dla tego Kreator, uważaj jednak, ponieważ Android Studio ma tendencję do wytwarzania zbyt skomplikowanego kodu płyty kotła.

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

Inna jakość tutorial można znaleźć na Android Hive tutaj: https://www.androidhive.info/2017/12/android-working-with-bottom-navigation/

 0
Author: Andrew S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 00:49:40