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

android.support.v4.view.PagerTitleStrip

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

效果:

xml使用:

<android.support.v4.view.ViewPager xmlns:android=""android:id="@+id/pager"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v4.view.PagerTitleStripandroid: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的子控件了。

部份源码:

@Overrideprotected 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。

@Overridepublic 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并设置。

莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法)

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

相关文章:

你感兴趣的文章:

标签云: