PagerTitle(Tab)Stripを使ってみる

2012-10-15T00:00:00+00:00 Android Java

最近、サーバー関係なタスクが多くて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っていう感じなんじゃないかなーっと

RubyOnRailsの標準テストをやってみる android.accessibilityservice.AccessibilityServiceを使用してNotificationを取得する