Androidの "L"プレビューのAPI diffレポートを見ると、ActionBar
クラスのナビゲーションモードに関連するすべてのメソッド(setNavigationMode()
、addTab()
、selectTab()
、&cなど)がわかります。現在は非推奨です。
ドキュメントは説明します:
アクションバーのナビゲーションモードは廃止予定で、インラインツールバーのアクションバーではサポートされていません。代わりに他の一般的なナビゲーションパターンを使用することを検討してください。
代替品とは何ですか?
また、「インラインツールバーのアクションバー」は新しい概念ですか?私は今まで聞いたことがないと思います。
新しい Androidデザインサポートライブラリ は TabLayout を追加し、そのタブ実装を提供します。タブの 材料設計ガイドライン に一致します。タブとViewPager
を実装する方法の完全なチュートリアルは、このビデオで見つけることができます
現在は推奨されていません。PagerTabStrip はサポートライブラリの一部です(そしてしばらくの間使用されてきました)。直接の代替品として機能します。より新しいGoogle Playスタイルのタブをお望みの場合は、 PagerSlidingTabStripライブラリ を使用するか、Googleが提供する例のいずれかを変更することができます 。 )SlidingTabsBasic または SlidingTabsColors で説明されているように Dev Bytesビデオ .
Android 5.0のドキュメントが利用可能になったので、ツールバーウィジェットの 公式ドキュメントを入手できます 。
アプリケーションコンテンツ内で使用するための標準ツールバー。
ツールバーは、アプリケーションレイアウト内で使用するためのアクションバーを一般化したものです。 アクションバーは伝統的にフレームワークによって制御されるアクティビティの不透明なウィンドウ装飾の一部ですが、ツールバーはビュー階層内の任意のネストレベルに配置できます。
Toolbar
ウィジェットを使ってアクションバーを置き換えることもできます。
アプリケーションは
setActionBar()
メソッドを使用して、アクティビティのアクションバーとしてツールバーを指定することを選択できます。
ツールバーにタブ自体を含めることはできないため、アクションバーのタブが廃止されたのは、おそらくこれが原因です。
また、それはappcompatライブラリを介して以前のAndroidのバージョンで利用可能です。詳しくはChris Banesによる こちらの投稿 をご覧ください。抜粋:
Android 5.0では新しいツールバーウィジェットが導入されました。これはActionBarパターンを一般化したものですが、muchを使用する際の制御性と柔軟性が向上します。ツールバーは他の階層と同じように階層内のビューであるため、残りのビューとのインターリーブ、アニメーション化、スクロールイベントへの反応が簡単になります。
彼らはViewGroup
を拡張するAndroid.widget.Toolbar
という名前の新しいクラスを追加したようです。また彼らはActivity
に新しいメソッドsetActionBar(Toolbar)
を追加しました。まだテストしていませんが、すべての種類のTabWidgets
、Spinners
、またはカスタムビューをToolbar
にラップし、それをActionbarとして使用できるようです。
新しいToolbar
は、複数の線オブジェクトを膨張させるために使用することはできませんので、タブを追加することは不可能です。Toolbar
のようなTabWidget
を使いたい場合は、タブオブジェクトを挿入することができますが、それは古いHoloスタイルでのみです。
ここ には、新しいMaterial DesignアニメーションでToolbar
のようにv7 TabWidget
を使用するカスタムライブラリがありますが、古いActionBar Tabs
と同じメソッドを使用します。あなたのViewPager
をそれに添付することができます。
推奨されていない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);
これが役に立つことを願っています。
私は同じ問題を抱えていました、そしてこの解決策は私にとてもよく合っていました:
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;
}
私はあなたが同じ重要性の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/
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);
}
}
Material Designでタブをスライドさせることをサポートするアクションバー(今は 'tool bar' - argh)をまとめている間、私はこれらのチュートリアルが役に立ちました:
https://www.youtube.com/watch?v=Fl0xMuo10yA
あなたは、あなたの特定の状況に合うようにこれらのリソースを総合しなければなりません。たとえば、exoguru.comのチュートリアルと同じスタイルでタブを手動で作成したくない場合があります。
ツールバーv7ウィジェットappcompatを使用して、非推奨のナビゲーションツールバーを処理するのは、私にとっては問題ありません。
setSupportActionBar(toolbar);
getSupportActionBar().setSubtitle("Feed Detail");
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//goToWhere
}
});