Android v4包下的PagerTitleStrip,ViewPager的頁面標題
android.support.v4.view.PagerTitleStrip
將Page的Title分離出來的一個自訂View,這樣可以靈活的設定title的樣式、文本。
效果:
xml使用:
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。
@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並設定。