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并设置。
莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法)