如何创建带有圆点指示器的Android View Pager? [英] How do you create an Android View Pager with a dots indicator?

查看:132
本文介绍了如何创建带有圆点指示器的Android View Pager?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

也许你们中的许多人(像我一样)在创建带有底点的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 with ViewPager, but TabLayout will be next to ViewPager, 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放置在任何地方,但是我们必须以编程方式将TabLayoutViewPager连接

In this case, we can put TabLayout anywhere, but we have to connect TabLayout with ViewPager 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.xmldefault_dot.xmltab_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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆