Режими навігації в рядку дій застаріли в Android L


203

Поглянувши звіт дифф з API для перегляду Android «L», я бачу , що всі методи , пов'язані з режимами навігації в ActionBarкласі (наприклад setNavigationMode(), addTab(), selectTab(), і с). тепер застарілі.

Документація пояснює:

Режими навігації на панелі дій застарілі та не підтримуються вбудованими панелями дій. Спробуйте скористатися іншими звичними моделями навігації.

Яка передбачувана заміна?

Крім того, чи є нова концепція "вбудовані панелі інструментів"? Я не думаю, що я чув про це раніше.


Де ви знайшли документи для L Preview?
Куно

8
@KlassenK Це ще не інтегровано в основну документацію, але ви можете завантажити її з developer.android.com/preview/reference.html
matiash

Дякуємо за посилання на документи!
Роберт Карл

Для setNavigationList що ви використовували
Lion789

1
@ShirishHerwade Так, оскільки він був об'єднаний в основну документацію, коли вийшов Android 5.0. У будь-якому випадку, тепер ви можете знайти повідомлення про
анулювання

Відповіді:


179

Нова бібліотека підтримки дизайну Android додає TabLayout , що забезпечує реалізацію вкладок, що відповідає вказівкам щодо дизайну матеріалів для вкладок . Повна інформація про те, як реалізувати вкладки, ViewPagerможна знайти у цьому відео

Тепер засуджується: PagerTabStrip є частиною бібліотеки підтримки (і протягом деякого часу) і служить в якості прямої заміни. Якщо ви віддаєте перевагу новіші вкладки стилів Google Play, можете скористатися бібліотекою PagerSlidingTabStrip або змінити будь-який із прикладів, наданих Google SlidingTabsBasic або SlidingTabsColors, як пояснено у цьому відео Dev Bytes .


8
Це пряма заміна в портретному режимі, бонус полегшує використання розширеного заголовка типу «Матеріал». Однак у ландшафтному режимі вкладки ActionBar автоматично переміщуються вгору на саму панель дій, звільняючи важливу область екрану. Хтось знає чистий спосіб управління цим за допомогою бібліотеки підтримки?
ehartwell

9
Документ розробника все ще говорить про використання вкладки "Діаграма". Simlpy ще не оновлено? developer.android.com/training/implementing-navigation/…
Ромул Уракагі Цай

3
Це заміна для NAVIGATION_MODE_TABS, але не для NAVIGATION_MODE_LIST: /
Geob-o-matic

2
@Geobert - NAVIGATION_MODE_LISTнабагато простіше, враховуючи, що все, що робилося, було додавати Spinner та кілька помічників зворотного дзвінка.
ianhanniballake

2
Що таке заміна NAVIGATION_MODE_LIST? Шахта зазначає це як застаріле ...
Саурон

20

Тепер, коли доступні документи Android 5.0, у нас є офіційна документація на віджет Панель інструментів :

Стандартна панель інструментів для використання у вмісті програми.

Панель інструментів - це узагальнення смуг дій для використання в макетах додатків. Хоча панель дій традиційно є частиною непрозорого декору вікна діяльності, керованого рамкою, Панель інструментів може бути розміщена на будь-якому довільному рівні вкладення в ієрархії перегляду .

ToolbarВіджет також може бути використаний для заміни панелі дій:

Додаток може обрати Панель інструментів як панель дій для діяльності за допомогою setActionBar()методу.

Позбавлення вкладок на панелі дій, ймовірно, пов’язане з цим, оскільки панелі інструментів не можуть містити самі вкладки.

Крім того, він доступний для попередніх версій Android через бібліотеку appcompat. Дивіться цю публікацію від Кріса Бейнса для отримання додаткової інформації. Уривок:

Android 5.0 представляє новий віджет Панелі інструментів. Це узагальнення шаблону ActionBar, але дає вам набагато більше контролю та гнучкості в його використанні. Панель інструментів - це перегляд у вашій ієрархії, як і будь-який інший, що полегшує переплетення з рештою ваших поглядів, анімувати, реагувати на події прокрутки.


53
"набагато більше контролю та гнучкості" приємно лише в тому випадку, якщо за замовчуванням є розумні та прості у користуванні. Якщо щось гнучко, але вам потрібно 20 рядків тут і там, щоб це працювало, я не вважаю це перемогою ...
TWiStErRob

1
@TWiStErRob Я згоден. Підкресліть його, а не моє :)
matiash

6
@TWiStErRob Я почуваюсь так само ... Google краще пильнуйте, цей вид діяльності нагадує мені старий Microsoft
Саурон

13

Схоже, вони додали новий клас з назвою, android.widget.Toolbarякий розширюється ViewGroup. Також вони додали новий метод setActionBar(Toolbar)в Activity. Я не перевіряв, але вона виглядає , як ви можете обернути всі види TabWidgets, Spinnersабо призначені для користувача подання до Toolbarі використовувати його в якості ActionBar.


1
Може хтось поділиться, якщо спробував щось із віджетом Панелі інструментів чи знає, як він має працювати. Також він включений у пакет сумісності?
Сандра

Подивіться на plus.google.com/+IanLake/posts/…
Куно,

1
Дуже дякую за посилання. Тому зараз, якщо я хочу розробити додаток, який би відповідав новим інструкціям щодо матеріалів, я, мабуть, зачекаю, коли панель інструментів стане доступною, тому що якщо я використовую панель дій, я б використовувала все що застаріло ..?
Сандра

1
ActionBar як і раніше буде стандартною схемою дизайну. Застарені будуть лише режими навігації (Tabs або Spinner). Дивіться developer.android.com/guide/topics/ui/actionbar.html#Tabs and developer.android.com/guide/topics/ui/actionbar.html#Dropdown
Куно

1
Я думаю, що це пов’язано з питанням. Нова версія apk програми i / o 2014 доступна для завантаження, і як ви бачите з plus.google.com/+RomanNurik/posts/PD6MS3feXTT , використовується багато стилів панелі інструментів . Нам залишається лише почекати вихідного коду та вивчити його :(
Сандра

4

Нове Toolbarне можна використовувати для надування кількох лінійних об'єктів, тому до нього не можна додати вкладки.
Якщо ви хочете використовувати Toolbarподібний a, TabWidgetви можете вставити до нього деякі об'єкти Tab, але тільки зі старим стилем Holo.

Тут є власна бібліотека, яка використовує v7, Toolbarяк TabWidgetі нові анімації Material Design, але вона використовує ті самі методи, що й старі ActionBar Tabs, тож ви можете приєднати ViewPagerдо неї.


3

Для 'заміни' застарілого ActionBar я змінив тип змінних типу ActionBar на PagerTabStrip, відповідно до (старий код у коментарі):

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

'Заміна' для ~ actionBar's .selectTab (tabindex) полягала в застосуванні мого асоційованого методу .setCurrentItem (int) ViewPager, подібного до цього (старий код у коментарі):

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

Сподіваюся, це корисно.


1

У мене була така ж проблема, і це рішення мені дуже приємно підходило:

У файл розміщення xml, який містить панель перегляду, додайте PagerTabStrip, як показано:

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

Щоб керувати заголовками сторінок, додайте у файл 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 - це також варіант.

Цей код із сайту розробника 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
Ось підручник, який містить цю відповідь, тому він може допомогти кому-небудь skholingua.com/android-basic/user-interface/compositeitems/…
Деян

0

Ці підручники я вважаю корисними під час збирання панелі дій (тепер "панель інструментів" - argh), яка підтримує розсувні вкладки з "Матеріал дизайну":

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

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

Вам начебто доведеться синтезувати ці ресурси, щоб відповідати вашій конкретній ситуації. Наприклад, ви, можливо, не захочете вручну створювати вкладки у тому ж стилі, що і підручник exoguru.com.


Друга ланка мертва.
jcaruso

@jcaruso - це не моя вина, оскільки термін дії цього домену, здається, закінчився. Відео на YouTube все ще актуальне
kip2

1
@ kip2 Я згоден, це не твоя вина. Однак я пропоную так, як всі пропонують, уникайте використання посилань для пояснення відповідей через цю проблему.
jcaruso

0

Добре для мене обробляти застарілу панель навігації за допомогою додатка віджетів toolbar v7.

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

0

Я думаю, що підходящою заміною, коли у вас є три-п’ять екранів однакового значення, є BottomNavigationActivity, це може бути використано для перемикання фрагментів.

Ви помітите, що майстер для цього існує в Android Studio, будьте обережні, однак Android Studio має тенденцію виробляти надмірно складний код пластини котла.

Підручник можна знайти тут: https://android.jlelse.eu/ultimate-guide-to-bottom-navigation-on-android-75e4efb8105f

Ще один навчальний посібник з якості можна знайти в Android Hive тут: https://www.androidhive.info/2017/12//android-working-with-bottom-navigation/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.