【发布时间】:2019-01-20 01:43:41
【问题描述】:
我有一个自定义视图,里面有一个 ViewPager,并且有一个 TabLayout 附加到 ViewPager。机器人视图设置为匹配父视图。
<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="wrap_content"
android:orientation="vertical"
android:fitsSystemWindows="true">
<CarouselPointMarkerViewPager
android:id="@+id/carousel_point_view_pager"
android:layout_width="match_parent"
android:layout_height="160dp"
android:clipToPadding="false"
android:overScrollMode="never"
android:paddingStart="@dimen/carousel_recycler_padding_start"
android:paddingEnd="@dimen/carousel_recycler_padding_end"
android:layout_gravity="center"/>
<android.support.design.widget.TabLayout
android:id="@+id/tablayout_point"
android:layout_width="wrap_content"
android:layout_height="25dp"
android:layout_marginBottom="20dp"
android:layout_marginStart="20dp"
android:layout_marginTop="10dp"
android:layout_gravity="start|bottom"
app:tabBackground="@drawable/tab_selector_carousel_point"
app:tabIndicatorHeight="0dp"
app:tabPaddingEnd="4dp"/>
</LinearLayout>
TabLayout 背景是:
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/active_point"
android:state_selected="true"/>
<item android:drawable="@drawable/non_active_point"/>
</selector>
示例:active_point
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:innerRadius="0dp"
android:shape="ring"
android:thickness="4dp"
android:useLevel="false">
<solid android:color="@color/bluelight"/>
</shape>
</item>
</layer-list>
目前它完美无缺。我将在 viewpager(cardviews)中有很多项目,所以我想要修复 tablayout 的最大可见“点”(选项卡),但是,当用户滚动视图寻呼机时,点必须“移动/动画”。
此时我可以使用参数app:tabMode="scrollable" 使其“移动”。
但我无法同时将最大可见点“修复”为一个值。
例如 10 个可见的点,但是当用户滚动 ViewPager 时,不会再出现点,但它们会动画。
我也尝试给 TabLayout 一个固定的 With ,但不能正常工作,它只显示 1 。
在接下来的示例中,view pager 有 61 个卡片浏览:
设置为可滚动模式:(在这种情况下,它会显示一些点,并且可以“滑动”)
【问题讨论】:
标签: android android-viewpager android-tablayout viewpagerindicator