it-swarm.com.ru

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

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

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

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

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

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

200
matiash

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

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

177
ianhanniballake

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

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

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

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

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

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

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

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

20
matiash

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

13
Kuno

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

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

4
NeoKree

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

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

2
applesauced

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

В 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;
}
1
AR Ross

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

0
Andrew S

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

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

0
kip2

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

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