Режимы навигации на панели действий устарели в 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. В любом случае, теперь вы можете найти устаревания уведомление в developer.android.com/reference/android/app/...
Матяш

Ответы:

179

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

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

ianhanniballake
источник
8
Это прямая замена в портретном режиме с преимуществом упрощения использования расширенного заголовка типа материала. Однако в альбомном режиме вкладки ActionBar автоматически перемещаются вверх в саму панель действий, освобождая важную область экрана. Кто-нибудь знает чистый способ управлять этим с помощью библиотеки поддержки?
ehartwell
9
В документе разработчика все еще написано использование вкладки «Панель действий». Симлпы еще не обновлены? 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 доступны, у нас есть официальная документация для виджета Панели инструментов :

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

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

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

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

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

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

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

Матяш
источник
53
«намного больше контроля и гибкости» хорошо, только если есть разумные и простые в использовании значения по умолчанию. Если что-то гибкое, но вам нужно 20 строк здесь и там, чтобы это работало, я не считаю это победой ...
TWiStErRob
1
@TWiStErRob Я согласен. Акцент его, а не мое :)
matiash
6
@TWiStErRob Я чувствую то же самое ... Google лучше следить, этот вид деятельности напоминает мне о старой Microsoft
Sauron
13

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

Куно
источник
1
Может кто-нибудь поделиться, если он что-то пробовал с виджетом Панели инструментов или знает, как он предназначен для работы. Также входит ли он в пакет совместимости?
Сандра
Взгляните на plus.google.com/+IanLake/posts/…
Куно
1
Большое спасибо за ссылку .. так что теперь, если я хочу разработать приложение, которое будет соответствовать новым рекомендациям по материалам, я, вероятно, должен подождать, пока панель инструментов станет доступной, потому что, если я использую панель действий, я буду использовать все что устарело ..?
Сандра
1
ActionBar по-прежнему будет стандартным шаблоном дизайна. Только режимы навигации будут устаревшими (вкладки или 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к ней.

NeoKree
источник
3

Для «замены» устаревшего 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);

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

applesauced
источник
1

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

В 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;
}
АР Росс
источник
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/…
Dejan
0

Я нашел эти учебники полезными, когда собирал панель действий (теперь «панель инструментов»), которая поддерживает скользящие вкладки с 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.

kip2
источник
Вторая ссылка мертва.
2016 г.
@jcaruso, это не моя вина, так как срок действия этого домена истек. Видео на YouTube все еще актуально
kip2
1
@ kip2 Согласен, это не твоя вина. Тем не менее, я предлагаю, как все предлагают, избегать использования ссылок для объяснения ответов из-за этой проблемы.
16:16
0

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

    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/

Эндрю С
источник