如何创建带有点指示器的 Android View Pager? [英] How do you create an Android View Pager with a dots indicator?
问题描述
可能你们中的许多人(和我一样)在创建带有底部点的 ViewPager
时遇到问题,如下所示:
你如何创建这样一个 Android ViewPager?
我们只需要:ViewPager, TabLayout 和 2 个用于选定点和默认点的可绘制对象.
首先,我们必须将TabLayout
添加到我们的屏幕布局中,并将其与ViewPager
连接起来.我们可以通过两种方式做到这一点:
在ViewPager
中嵌套TabLayout
<com.google.android.material.tabs.TabLayoutandroid:layout_width=match_parent"android:layout_height=wrap_content"/></androidx.viewpager.widget.ViewPager>
<块引用>
在这种情况下TabLayout
会自动与ViewPager
连接,但是TabLayout
会在ViewPager
的旁边,没有结束.
单独的TabLayout
<com.google.android.material.tabs.TabLayoutandroid:id="@+id/tab_layout";android:layout_width=match_parent"android:layout_height=wrap_content"/>
<块引用>
在这种情况下,我们可以将 TabLayout
放在任何地方,但是我们必须以编程方式将 TabLayout
与 ViewPager
连接起来
ViewPager pager = (ViewPager) view.findViewById(R.id.photos_viewpager);PagerAdapter 适配器 = new PhotosAdapter(getChildFragmentManager(), photosUrl);pager.setAdapter(适配器);TabLayout tabLayout = (TabLayout) view.findViewById(R.id.tab_layout);tabLayout.setupWithViewPager(pager, true);
一旦我们创建了我们的布局,我们就必须准备我们的点.所以我们创建了三个文件:selected_dot.xml
、default_dot.xml
和 tab_selector.xml
.
selected_dot.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><项目><形状android:innerRadius=0dp"机器人:形状=环"机器人:厚度=8dp"android:useLevel="false"><solid android:color="@color/colorAccent"/></形状></项目></层列表>
default_dot.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><项目><形状android:innerRadius=0dp"机器人:形状=环"机器人:厚度=8dp"android:useLevel="false"><solid android:color="@android:color/darker_gray"/></形状></项目></层列表>
tab_selector.xml
<选择器 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"/></选择器>
现在我们只需要向 XML 布局中的 TabLayout
添加 3 行代码.
app:tabBackground=@drawable/tab_selector";app:tabGravity="center";app:tabIndicatorHeight=0dp"
Probably many of you (as me), have problem with creating ViewPager
with bottom dots, like this:
How do you create such an Android ViewPager?
All we need are: ViewPager, TabLayout and 2 drawables for selected and default dots.
Firstly, we have to add TabLayout
to our screen layout, and connect it with ViewPager
. We can do this in two ways:
Nested TabLayout
in ViewPager
<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>
In this case
TabLayout
will be automatically connected withViewPager
, butTabLayout
will be next toViewPager
, not over it.
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"/>
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);
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
.
selected_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="@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>
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"
这篇关于如何创建带有点指示器的 Android View Pager?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!