Android v4包下的PagerTitleStrip,ViewPager的页面标题

android.support.v4.view.PagerTitleStrip

将Page的Title分离出来的一个自定义View,这样可以灵活的设置title的样式、文本。


效果:

技术分享技术分享


xml使用:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/pager"
	android:layout_width="match_parent"
	android:layout_height="match_parent">

	<android.support.v4.view.PagerTitleStrip
		android:id="@+id/pager_title_strip"
		android:layout_width="match_parent"
		android:layout_height="30dp"
		android:layout_gravity="bottom"
		android:paddingTop="4dp"
		android:paddingBottom="4dp" />
</android.support.v4.view.ViewPager>

  android:layout_gravity 控制标题的位置  一般取值为 bottom或top


看到开源项目ImageLoader中使用了这个,找了半天没看到哪里findbyid的,

原来在它的源码里就把它想成是ViewPager的子控件了。

部份源码:

 @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();

        final ViewParent parent = getParent();
        if (!(parent instanceof ViewPager)) {
            throw new IllegalStateException(
                    "PagerTitleStrip must be a direct child of a ViewPager.");
        }

        final ViewPager pager = (ViewPager) parent;
        final PagerAdapter adapter = pager.getAdapter();

        pager.setInternalPageChangeListener(mPageListener);
        pager.setOnAdapterChangeListener(mPageListener);
        mPager = pager;
        updateAdapter(mWatchingAdapter != null ? mWatchingAdapter.get() : null, adapter);
    }

  分析:在onAttachedToWindow()时,直接找出parent-view,如果是ViewPager才能使用,否则直接抛出异常。


设置title值

PagerAdapter 里有一个getPageTitle(),需要重写它,然后可以根据不同的page返回不同的title。

@Override
public CharSequence getPageTitle(int position) {
	switch (position) {
		case 0:
			return getString(R.string.title_list);
		case 1:
			return getString(R.string.title_grid);
		default:
	return null;
	}
}

  而在PageTitleStrip的updateText()源码里,调用了viewPager的adapter.getPageTitle,拿到title并设置。


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。