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

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

问题描述

可能你们中的许多人(和我一样)在创建带有底部点的 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 放在任何地方,但是我们必须以编程方式将 TabLayoutViewPager 连接起来

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.xmldefault_dot.xmltab_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=@dr​​awable/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 with ViewPager, but TabLayout will be next to ViewPager, 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 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);

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屋!

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