Режимы навигации на панели действий устарели в Android L

Взглянув на отчет API diff для предварительного просмотра Android "L", я вижу, что все методы, связанные с режимами навигации в ActionBar класс (такой как setNavigationMode(), addTab(), selectTab()и с). сейчас устарели.

Документация объясняет:

Режимы навигации панели действий устарели и не поддерживаются встроенными панелями действий панели инструментов. Попробуйте использовать другие распространенные шаблоны навигации.

Что такое предполагаемая замена?

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

10 ответов

Решение

Новая библиотека поддержки дизайна Android добавляет TabLayout, предоставляя реализацию вкладок, соответствующую рекомендациям по дизайну материалов для вкладок. Полный обзор того, как реализовать вкладки и ViewPager можно найти в этом видео

Теперь не рекомендуется: PagerTabStrip является частью библиотеки поддержки (и уже некоторое время) и служит прямой заменой. Если вы предпочитаете более новые вкладки в стиле Google Play, вы можете использовать библиотеку PagerSlidingTabStrip или изменить любой из предоставленных Google примеров SlidingTabsBasic или SlidingTabsColors, как описано в этом видео Dev Bytes.

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

Стандартная панель инструментов для использования в содержимом приложения.

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

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

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

Скорее всего, это связано с устареванием вкладок на панели действий, поскольку панели инструментов сами по себе не могут содержать вкладки.

Кроме того, он доступен для предыдущих версий Android через библиотеку appcompat. Смотрите этот пост Крис Бейнс для получения дополнительной информации. Выдержка:

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

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

Новый Toolbar не может использоваться для надувания многострочных объектов, поэтому к ним невозможно добавить вкладки.
Если вы хотите использовать Toolbar как TabWidget Вы можете вставить в него несколько объектов Tab, но только со старым стилем Holo.

Здесь есть пользовательская библиотека, которая использует v7 Toolbar лайк TabWidget с новой анимацией Material Design, но она использует те же методы из старого ActionBar Tabsтак что вы можете прикрепить свой ViewPager к этому.

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

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

"Замена" для.selectTab(tabindex) для ~ actionBar заключалась в том, чтобы использовать мой связанный метод ViewPager.setCurrentItem(int), например так (старый код в комментарии):

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

Надеюсь, это полезно.

У меня была та же проблема, и это решение меня вполне устраивало:

В XML-файле макета, который содержит viewpager, добавьте 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" />

Чтобы контролировать заголовки страниц, добавьте оператор switch в файл 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;
}

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);
    }
}

Я нашел эти учебники полезными, когда собирал панель действий (теперь "панель инструментов" - argh), которая поддерживает скользящие вкладки с Material Design:

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

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

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

Я думаю, что подходящей заменой для трех-пяти экранов одинаковой важности является 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/

Хорошо для меня, чтобы справиться с устаревшей панелью инструментов навигации с помощью панели инструментов v7 appcompat виджета.

    setSupportActionBar(toolbar);
    getSupportActionBar().setSubtitle("Feed Detail");
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //goToWhere
        }
    });
Другие вопросы по тегам