如何创建带有圆点指示器的Android View Pager? [英] How do you create an Android View Pager with a dots indicator?
问题描述
也许你们中的许多人(像我一样)在创建带有底点的ViewPager
时遇到问题,如下所示:
Probably many of you (as me), have problem with creating ViewPager
with bottom dots, like this:
如何创建这样的Android ViewPager?
How do you create such an Android ViewPager?
推荐答案
我们需要的是: TabLayout 和2个可绘制对象(用于选定点和默认点).
All we need are: ViewPager, TabLayout and 2 drawables for selected and default dots.
首先,我们必须在屏幕布局中添加TabLayout
,并将其与ViewPager
连接.我们可以通过两种方式做到这一点:
Firstly, we have to add TabLayout
to our screen layout, and connect it with ViewPager
. We can do this in two ways:
<androidx.viewpager.widget.ViewPager
android:id="@+id/photos_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.tabs.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</androidx.viewpager.widget.ViewPager>
在这种情况下,
TabLayout
将自动与ViewPager
连接,但是TabLayout
将在ViewPager
旁边,而不是在其上方.
In this case
TabLayout
will be automatically connected withViewPager
, butTabLayout
will be next toViewPager
, not over it.
单独的TabLayout
Separate TabLayout
<androidx.viewpager.widget.ViewPager
android:id="@+id/photos_viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
在这种情况下,我们可以将
TabLayout
放置在任何地方,但是我们必须以编程方式将TabLayout
与ViewPager
连接
In this case, we can put
TabLayout
anywhere, but we have to connectTabLayout
withViewPager
programmatically
ViewPager pager = (ViewPager) view.findViewById(R.id.photos_viewpager);
PagerAdapter adapter = new PhotosAdapter(getChildFragmentManager(), photosUrl);
pager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);
tabLayout.setupWithViewPager(pager, true);
创建布局后,我们必须准备点.因此,我们创建了三个文件:selected_dot.xml
,default_dot.xml
和tab_selector.xml
.
Once we created our layout, we have to prepare our dots. So we create three files: selected_dot.xml
, default_dot.xml
and tab_selector.xml
.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:innerRadius="0dp"
android:shape="ring"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="@color/colorAccent"/>
</shape>
</item>
</layer-list>
default_dot.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape
android:innerRadius="0dp"
android:shape="ring"
android:thickness="8dp"
android:useLevel="false">
<solid android:color="@android:color/darker_gray"/>
</shape>
</item>
</layer-list>
tab_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/selected_dot"
android:state_selected="true"/>
<item android:drawable="@drawable/default_dot"/>
</selector>
现在,我们只需在XML布局中的TabLayout
中添加3行代码即可.
Now we need to add only 3 lines of code to TabLayout
in our XML layout.
app:tabBackground="@drawable/tab_selector"
app:tabGravity="center"
app:tabIndicatorHeight="0dp"
对于ViewPager2
,请阅读本文:
For ViewPager2
read this article:
带点指示器的ViewPager(2)在medium.com
ViewPager(2) with dots indicator at medium.com
欢迎投票;-)
这篇关于如何创建带有圆点指示器的Android View Pager?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!