アクションバーのナビゲーションモードはAndroid Lで廃止されました


203

Androidの「L」プレビュー用のAPIの差分レポートを見てみると、私が見ることでナビゲーションモードに関連するすべてのメソッドActionBarクラス(のようなsetNavigationMode()addTab()selectTab()、&​​C)。廃止されました。

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

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

想定される代替品は何ですか?

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


Lプレビューのドキュメントはどこで見つけましたか?
Kuno

8
@KlassenKまだメインのドキュメントには統合されていませんが、developer.android.com
preview / reference.html

ドキュメントへのリンクをありがとう!
Robert Karl

setNavigationListの場合、何を使用しましたか
Lion789 2015

1
@ShirishHerwadeはい、Android 5.0のリリース時にメインドキュメントに統合されたためです。いずれにせよ、あなたは今では非推奨の通知を見つけることができますdeveloper.android.com/reference/android/app/...
matiash

回答:


179

新しいAndroid Design Support LibraryTabLayoutを追加し、タブのマテリアルデザインガイドラインに一致するタブ実装を提供します。タブを実装する方法の完全なウォークスルーでViewPagerあり、このビデオで見つけることができます

現在は非推奨:PagerTabStripは、サポートライブラリの一部である(そしていくつかの時間のためにされている)との直接の代替として機能します。新しいGoogle Playスタイルのタブが必要な場合は、PagerSlidingTabStripライブラリを使用するか、このDev Bytesビデオで説明されているように、Googleが提供するサンプルSlidingTabsBasicまたはSlidingTabsColorsのいずれかを変更できます。


8
これは、縦長モードでの直接の置き換えで、拡張されたMaterialタイプのヘッダーを簡単に使用できるようになります。ただし、横長モードでは、ActionBarタブが自動的にアクションバー自体に移動し、重要な画面領域が解放されます。誰もがサポートライブラリでこれを管理するきれいな方法を知っていますか?
ehartwell 2014

9
開発者ドキュメントには、アクションバータブの使用についての説明があります。Simlpyはまだ更新されていませんか?developer.android.com/training/implementing-navigation/...
ロムルスUrakagi Ts'ai

3
これはNAVIGATION_MODE_TABSの代わりですが、NAVIGATION_MODE_LISTの代わりではありません:/
Geob-o-matic

2
@Geobert- スピナーといくつかのコールバックヘルパーをNAVIGATION_MODE_LIST追加しただけなので、はるかに簡単です。
ianhanniballake 2014年

2
の代わりはNAVIGATION_MODE_LIST何ですか?鉱山はそれを非難されたものとしてリストします...
サウロン

20

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

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

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

Toolbarウィジェットはまた、アクションバーを置き換えるために使用することができます。

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

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

また、appcompatライブラリを介して、以前のAndroidバージョンで利用できます。詳細については、Chris Banesによるこの投稿を参照してください。抜粋:

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


53
「はるかに多くの制御と柔軟性」は、実用的で使いやすいデフォルトがある場合にのみ有効です。何かが柔軟であるが、それを機能させるためにあちこちに20行が必要な場合、私はそれを勝利とは見なしません...
TWiStErRob

1
@TWiStErRob同意する。私のものではなく、彼のものを強調します:)
マティアッシュ2014年

6
@TWiStErRob私も同じように感じています... Googleは気をつけてください。この種の活動は古いマイクロソフトを思い出させます
Sauron

13

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


1
誰かがツールバーウィジェットで何かを試したか、それがどのように機能するかを知っている場合、誰かが共有できますか また、互換性パッケージに含まれていますか?
サンドラ2014


1
リンクをありがとうございました。新しいマテリアルガイドラインに準拠したアプリを開発したい場合は、ツールバーが利用可能になるまで待つ必要があります。アクションバーを使用すると、すべてを使用することになるためです。それは非推奨です。
サンドラ

1
ActionBarは標準のデザインパターンのままです。ナビゲーションモードのみが非推奨になります(タブまたはスピナー)。developer.android.com/guide/topics/ui/actionbar.html#Tabsおよびdeveloper.android.com/guide/topics/ui/actionbar.html#Dropdown
Kuno

1
私はそれが質問に関連していると思います。新しいi / o 2014アプリケーションのapkがダウンロード可能であり、plus.google.com/+RomanNurik/posts/PD6MS3feXTTからわかるように、使用されるツールバースタイルはたくさんあります。 。私たちはソースコードを待って、それからそれを探る必要があります:(
Sandra

4

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

ここには、新しいマテリアルデザインアニメーションとToolbar同様にv7を使用するカスタムライブラリがありますがTabWidget、古いと同じメソッドを使用しているActionBar Tabsため、ViewPagerにアタッチできます。


3

非推奨の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);

これがお役に立てば幸いです。


1

私は同じ問題を抱えていましたが、この解決策は非常にうまく適合しました:

次のように、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ファイルにスイッチステートメントを追加します。

@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

これらのチュートリアルは、マテリアルデザインでタブのスライドをサポートするアクションバー(現在は 'ツールバー'-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チュートリアルと同じスタイルで手動でタブを作成したくない場合があります。


2番目のリンクが停止しています。
jcaruso

@jcarusoそのドメインは期限切れのようですので、私のせいではありません。YouTubeビデオはまだ関連しています
kip2 '29

1
@ kip2同意します、それはあなたの責任ではありません。ただし、皆さんがおっしゃるように、この問題のため、リンクを使用して回答を説明することは避けてください。
jcaruso 2016年

0

ツールバーv7ウィジェットappcompatを使用して非推奨のナビゲーションツールバーを処理するために私のためによく。

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

0

重要度の等しい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/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.