Android Design Support libraryを使う (3)TabLayout
Android Design Support libraryはAndroid Support Library 22.2で公開された、
マテリアルデザインを実現するのに便利なコンポーネントのライブラリです。
そんなDesign Support libraryのコンポーネントの紹介と使い方の説明をしていきたいと思います。
導入方法は第一回のこちらから。
本稿ではTabLayoutの使い方を紹介します。
TabLayout
TabLayoutはタブの実装を行うためのコンポーネントです。
タブの実装は従来Actionbar.Tab(現在非推奨)がなどがあり実装が若干ごちゃごちゃしていた感がありましたが、TabLayoutの登場でそのあたりがすっきりしました。
また、ViewPager(スワイプによりページ遷移してくれるアレ)との同期を想定してある設計なのも嬉しいですね。
基本実装
レイアウトファイルにTabLayoutを配置します。
acitivity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
コード側でタブを生成、セットします。
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TabLayout tabLayout = (TabLayout)findViewById(R.id.tab_layout); tabLayout.addTab(tabLayout.newTab().setText("タブ1")); tabLayout.addTab(tabLayout.newTab().setText("タブ2")); tabLayout.addTab(tabLayout.newTab().setText("タブ3")); } }
表示するタブをTabLayout#newTab()で生成し、タブにテキストを表示する場合はsetText()、アイコンを表示する場合はsetIcon()を呼びます。
TabをTabLayou#addTab()で追加します。
ViewPagerとの組み合わせ
TabLayotにはViewPagerと表示の同期を簡単に可能にするメソッドが用意されています。
以下ではViewPagerとの併用したパターンを紹介します。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#3F51B5" app:tabIndicatorColor="#FF4081" app:tabSelectedTextColor="#FFFFFF" app:tabTextColor="#000000" /> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TabLayout tabLayout = (TabLayout)findViewById(R.id.tab_layout); tabLayout.addTab(tabLayout.newTab()); tabLayout.addTab(tabLayout.newTab()); tabLayout.addTab(tabLayout.newTab()); ViewPager viewPager = (ViewPager)findViewById(R.id.view_pager); viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager())); tabLayout.setupWithViewPager(viewPager); } private class ViewPagerAdapter extends FragmentPagerAdapter { public ViewPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { Fragment fragment = null; switch (position) { case 0: fragment = new FirstFragment(); break; case 1: fragment = new SecondFragment(); break; case 2: fragment = new ThirdFragment(); break; default: break; } return fragment; } @Override public int getCount() { return 3; } @Override public CharSequence getPageTitle(int position) { return "タブ"+ (position+1); } }
TabLayoutとViewPagerを配置したレイアウトを用意し、TabLayou#setupWithViewPager(ViewPager)を呼んであげればOKです。
これだけでTabLayoutとViewPagerを結び付けてそれぞれの動きを同期してくれます。
TabLayoutの使い方について紹介しました。
ViewPagerとの連携が楽なのが本当にありがたいですね。