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との連携が楽なのが本当にありがたいですね。