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

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

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

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

Какова предполагаемая замена?

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

Ответ 1

В новой библиотеке поддержки Android design добавлена ​​TabLayout, обеспечивающая реализацию табуляции, которая соответствует рекомендации по разработке материалов для вкладок. Полное руководство по реализации вкладок и ViewPager можно найти в этом видео

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

Ответ 2

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

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

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

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

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

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

// ActionBar bigActionBar;
PagerTabStrip bigActionBar;

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

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

Я нашел эти руководства полезными при создании панели действий (теперь это "панель инструментов" - 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.

Ответ 9

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

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

Ответ 10

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