PagerTitle(Tab)Stripを使ってみる
最近、サーバー関係なタスクが多くてAndroidな音沙汰がまったくしなかったのでリハビリ的な感じでちょいと調べ物をしてました。それがだいぶ前からGoogle Play等であったように
の上部に表示される「おすすめ」や「カテゴリ」といったようなヘッダーラベルのような物。これどうやってやるのかって調べたらPagerTitleStrip、PagerTabStrip等を用いる事で簡単に出来る模様。なのでやってみた(実行環境はAndroid2.2)
(AndroidManifest.xmlはアクティビティ定義だけなのでパス)
MainActivity.java
```javapackage sample.test;
import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager;
public class MainActivity extends FragmentActivity { @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); setContentView(R.layout.main);
((ViewPager)findViewById(R.id.pager)).setAdapter(
new SampleFragmentPagerAdapter(getSupportFragmentManager())
);
}
} ```
res/layout/main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<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="#555"
android:textColor="#fff" />
</android.support.v4.view.ViewPager>
</RelativeLayout>
PagerTabStripのandroid:layout_gravityを変えれば下に表示も出来るみたい
SampleFragmentPagerAdapter.java
package sample.test;
import android.os.Bundle;
public class SampleFragmentPagerAdapter extends FragmentStatePagerAdapter {
public SampleFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int page) {
SampleFragment fragment = new SampleFragment();
Bundle bundle = new Bundle();
bundle.putInt("page", page + 1);
fragment.setArguments(bundle);
return fragment;
}
@Override
public int getCount() {
return 5;
}
@Override
public CharSequence getPageTitle(int pos) {
return "Page" + (pos + 1);
}
}
UIコンテナ内の上部に表示されるPagerTabStripのテキストはgetPageTitleで設定出来る模様。あとは普通にViewPagerと使い方が同じなので(ry
SampleFragment.java
package sample.test;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class SampleFragment extends Fragment {
private int mPage = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
if (args != null) {
mPage = args.getInt("page");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {
View v = inflater.inflate(R.layout.fragment, container, false);
TextView tv = (TextView)v.findViewById(R.id.text);
tv.setText(String.valueOf(mPage));
return tv;
}
}
とりあえずmPageが入って来なかったらどうしようと思ったけど、とりあえず放置で。特に書くことも無いのでここもサクっとパス
res/layout/fragment.xml
<?xml version="1.0" encoding="utf-8" ?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textColor="#888"
android:textSize="96dp" />
とりあえず無駄にテキストでっかくしたれっていう感じで。はい、まぁ終わりっすね。とりあえずビルドしてインストールして見てみると
な感じ。PagerTabStripのlayout_gravityをbottomにしているので下に出ちゃいますが
でPagerTitleStripとPagerTabStripの違いについてなんだけど、厳密的にソースハックした訳じゃないので確証無いんすけど、ただテキストを出すのがPagerTitleStripで(横スクロールによりコンテンツなFragmentと連動)、テキストな部分をTab方式なUIを提供する(タッチする事で切り替えも可能)のがPagerTabStripっていう感じなんじゃないかなーっと