如何将PagerTitleStrip置于顶部中央?Android布局问题
解决PagerTitleStrip居中与Toolbar重叠问题
看起来你碰到了两个棘手的小问题:PagerTitleStrip没法在ViewPager里居中,还有它和Toolbar重叠的情况。咱们一步步来搞定:
1. 先搞定重叠问题
你原来的布局里,InfiniteViewPager设了match_parent的宽高,之后才写Toolbar——在Android布局规则里,后声明的View会绘制在前面,所以Toolbar会盖在ViewPager的顶部区域,自然就和TitleStrip重叠了。
咱们得调整布局结构,把Toolbar放在最顶部,ViewPager跟在它下面,用垂直方向的LinearLayout或者ConstraintLayout来组织就行:
2. 让PagerTitleStrip居中
PagerTitleStrip(包括你用的FontPagerTitleStrip)是ViewPager的特殊子View,它的布局逻辑由ViewPager管控,直接设layout_gravity或者margin大概率不生效。正确的做法是:
- 把TitleStrip的
layout_width设为match_parent,让它铺满ViewPager的宽度 - 用
android:gravity="center"让内部的标题文本居中 - 用
paddingStart和paddingEnd代替margin来设置左右空白(ViewPager会忽略子View的margin设置)
修改后的完整XML示例
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- Toolbar放在顶部,避免和ViewPager内容重叠 --> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="50dp" app:theme="@style/CustomActionBar" /> <com.antonyt.infiniteviewpager.InfiniteViewPager android:id="@+id/pager" android:layout_width="match_parent" android:layout_height="match_parent"> <me.alexrs.fontpagertitlestrip.lib.FontPagerTitleStrip android:id="@+id/titlestrip" android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:paddingStart="50dp" android:paddingEnd="50dp" android:background="@color/material_fragment_top" app:fontFamily="@font/font" app:theme="@style/AppTheme.PopupOverlay" /> </com.antonyt.infiniteviewpager.InfiniteViewPager> </LinearLayout>
额外提示
如果你的布局需要更灵活的约束(比如Toolbar悬浮),可以换成ConstraintLayout,给ViewPager加app:layout_constraintTop_toBottomOf="@id/toolbar",同样能避免重叠。
另外,要是你自定义的FontPagerTitleStrip重写了布局逻辑,可能得检查下自定义View的代码,但按上面的方法,绝大多数场景下都能解决居中问题。
内容的提问来源于stack exchange,提问作者Neelay Srivastava
相关产品推荐
相关产品推荐

