web-dev-qa-db-ja.com

アクションバーのナビゲーションモードはAndroid Lでは非推奨です

Androidの "L"プレビューのAPI diffレポートを見ると、ActionBarクラスのナビゲーションモードに関連するすべてのメソッド(setNavigationMode()addTab()selectTab()、&cなど)がわかります。現在は非推奨です。

ドキュメントは説明します:

アクションバーのナビゲーションモードは廃止予定で、インラインツールバーのアクションバーではサポートされていません。代わりに他の一般的なナビゲーションパターンを使用することを検討してください。

代替品とは何ですか?

また、「インラインツールバーのアクションバー」は新しい概念ですか?私は今まで聞いたことがないと思います。

201
matiash

新しい AndroidデザインサポートライブラリTabLayout を追加し、そのタブ実装を提供します。タブの 材料設計ガイドライン に一致します。タブとViewPagerを実装する方法の完全なチュートリアルは、このビデオで見つけることができます

現在は推奨されていません。PagerTabStrip はサポートライブラリの一部です(そしてしばらくの間使用されてきました)。直接の代替品として機能します。より新しいGoogle Playスタイルのタブをお望みの場合は、 PagerSlidingTabStripライブラリ を使用するか、Googleが提供する例のいずれかを変更することができます 。 )SlidingTabsBasic または SlidingTabsColors で説明されているように Dev Bytesビデオ .

178
ianhanniballake

Android 5.0のドキュメントが利用可能になったので、ツールバーウィジェットの 公式ドキュメントを入手できます

アプリケーションコンテンツ内で使用するための標準ツールバー。

ツールバーは、アプリケーションレイアウト内で使用するためのアクションバーを一般化したものです。 アクションバーは伝統的にフレームワークによって制御されるアクティビティの不透明なウィンドウ装飾の一部ですが、ツールバーはビュー階層内の任意のネストレベルに配置できます

Toolbarウィジェットを使ってアクションバーを置き換えることもできます。

アプリケーションはsetActionBar()メソッドを使用して、アクティビティのアクションバーとしてツールバーを指定することを選択できます。

ツールバーにタブ自体を含めることはできないため、アクションバーのタブが廃止されたのは、おそらくこれが原因です。

また、それはappcompatライブラリを介して以前のAndroidのバージョンで利用可能です。詳しくはChris Banesによる こちらの投稿 をご覧ください。抜粋:

Android 5.0では新しいツールバーウィジェットが導入されました。これはActionBarパターンを一般化したものですが、muchを使用する際の制御性と柔軟性が向上します。ツールバーは他の階層と同じように階層内のビューであるため、残りのビューとのインターリーブ、アニメーション化、スクロールイベントへの反応が簡単になります。

20
matiash

彼らはViewGroupを拡張するAndroid.widget.Toolbarという名前の新しいクラスを追加したようです。また彼らはActivityに新しいメソッドsetActionBar(Toolbar)を追加しました。まだテストしていませんが、すべての種類のTabWidgetsSpinners、またはカスタムビューをToolbarにラップし、それをActionbarとして使用できるようです。

13
Kuno

新しいToolbarは、複数の線オブジェクトを膨張させるために使用することはできませんので、タブを追加することは不可能です。
ToolbarのようなTabWidgetを使いたい場合は、タブオブジェクトを挿入することができますが、それは古いHoloスタイルでのみです。

ここ には、新しいMaterial DesignアニメーションでToolbarのようにv7 TabWidgetを使用するカスタムライブラリがありますが、古いActionBar Tabsと同じメソッドを使用します。あなたのViewPagerをそれに添付することができます。

4
NeoKree

推奨されていない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);

これが役に立つことを願っています。

2
applesauced

私は同じ問題を抱えていました、そしてこの解決策は私にとてもよく合っていました:

Viewpagerを含むレイアウト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ファイルにswitchステートメントを追加します。

@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

私はあなたが同じ重要性の3から5画面を持っているときのための適切な代替品が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

Material Designでタブをスライドさせることをサポートするアクションバー(今は 'tool bar' - 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のチュートリアルと同じスタイルでタブを手動で作成したくない場合があります。

0
kip2

ツールバーv7ウィジェットappcompatを使用して、非推奨のナビゲーションツールバーを処理するのは、私にとっては問題ありません。

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