PagerTitleStrip使用
程序员文章站
2022-06-09 20:25:59
...
PagerTitleStrip是ViewPager的当前页面,下一页面和前一页面的非交互式指示符。 它旨在用作XML布局中ViewPager小部件的子视图。 将其作为ViewPager的子项添加到布局文件中,并将其android:layout_gravity设置为TOP或BOTTOM,以将其固定到ViewPager的顶部或底部。 每个页面的标题由提供给ViewPager的适配器中的PagerAdapter.getPageTitle(int)方法提供。
使用ViewPager.DecorView注释注释的视图被视为ViewPager“装饰”的一部分。
@ViewPager.DecorView
public class PagerTitleStrip extends ViewGroup {
用法
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.view.PagerTitleStrip
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_gravity="top"
android:background="@color/colorAccent"/>
</android.support.v4.view.ViewPager>
在Adapter里面重写getPageTitle方法即可。
viewPager.setAdapter(mPagerAdapter = new PagerAdapter() {
@Override
public int getCount() {
return mDataList.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mDataList.get(position);
}
@Override
public int getItemPosition(@NonNull Object object) {
if (object != null && object instanceof View){
View view = (View) object;
String content = (String) view.getTag();
int position = (int) view.getTag(TAG_POSITION_KEY);
int b = content == getItem(position) ? POSITION_UNCHANGED : POSITION_NONE;
return b;
}
return super.getItemPosition(object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
public Object getItem(int position){
if (mDataList == null || mDataList.size() <= position || position < 0) {
return null;
}
return mDataList.get(position);
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = mViewCache.size() > 0 ? mViewCache.removeFirst() : null;
if (view == null) {
view = View.inflate(MainActivity.this, R.layout.item_pager, null);
}
TextView textView = view.findViewById(R.id.pager_tv);
textView.setText(mDataList.get(position));
view.setTag(mDataList.get(position));
view.setTag(TAG_POSITION_KEY, position);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
View deleteView = (View) object;
container.removeView(deleteView);
mViewCache.add(deleteView);
}
});
可以通过ViewPager.LayoutParams.isDecor
去判断一个View是不是DecorView。
参考链接
上一篇: Java继承的简单实现