ViewPager2 的点指示器不显示

Dots indicator for ViewPager2 doesn't show

我正在使用简单的 ViewPager2 和静态数字 od 页面,我想在其中添加点指示器。我找到了很多如何操作的示例,并且我已经使用 TabLayouMediator 在页面底部设置了工作指示器,但我看不到这些点。当我点击指示器应该在的地方时,它会切换页面并且可以看到按钮单击的效果。无论如何,我看不到默认和活动的点图像。点指示器用于 Whosebug 教程。

由于指标可以切换页面,我认为 TabLayouMediator 实现正确。此外,我认为指示器未被任何布局覆盖,因为我可以使用它并且我看到点击效果。对此,我认为问题出在TabLayout,但我无法识别。

下面是我的代码。非常感谢您的帮助。

activity.java

TabLayout tabLayout = findViewById(R.id.tab_layout);
        TabLayoutMediator tabLayoutMediator = new TabLayoutMediator(tabLayout, viewPager2, true, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { }
        });
        tabLayoutMediator.attach();

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:layout_margin="10dp"
    android:orientation="vertical">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/TutorialSmartphone_Cl_Header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/TutorialSmartphone_Gl_Header"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintGuide_end="30dp" />

        <ImageView
            android:id="@+id/TutorialSmartphone_Iv_Logo"
            android:layout_width="200dp"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:scaleType="fitXY"
            app:layout_constraintBottom_toTopOf="@+id/TutorialSmartphone_Gl_Header"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:srcCompat="@drawable/logo" />

        <Switch
            android:id="@+id/TutorialSmartphone_Sw_ShowNextTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:scrollbarSize="10dp"
            app:layout_constraintBottom_toTopOf="@+id/TutorialSmartphone_Gl_Header"
            app:layout_constraintEnd_toEndOf="parent" />

        <TextView
            android:id="@+id/TutorialSmartphone_Tv_ShowNextTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="showNextTime"
            android:textSize="15dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@+id/TutorialSmartphone_Gl_Header" />
    </androidx.constraintlayout.widget.ConstraintLayout>

    <RelativeLayout
        android:id="@+id/TutorialSmartphone_Rl_ViewerPage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/TutorialSmartphone_Rl_Buttons"
        android:layout_below="@+id/TutorialSmartphone_Cl_Header"
        android:layout_marginTop="0dp"
        android:layout_marginBottom="0dp"
        android:orientation="vertical"
        app:layout_constraintBottom_toTopOf="@+id/TutorialSmartphone_Rl_Buttons">

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/TutorialSmartphone_Vp_Text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_marginStart="0dp"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="20dp"
            android:layout_marginEnd="0dp"
            android:layout_marginRight="0dp"
            android:layout_marginBottom="20dp" />

    </RelativeLayout>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/TutorialSmartphone_Rl_Buttons"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_gravity="bottom"
        android:layout_marginEnd="0dp"
        android:layout_marginRight="0dp"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/TutorialSmartphone_Iv_Prev"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_alignParentBottom="false"
            android:layout_marginStart="0dp"
            android:layout_marginLeft="0dp"
            android:layout_marginTop="0dp"
            android:layout_marginBottom="20dp"
            android:background="@drawable/buttonshape"
            android:onClick="prevPage"
            android:paddingTop="2dp"
            android:paddingBottom="2dp"
            android:rotation="180"
            android:scaleType="fitEnd"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:srcCompat="@drawable/triangle" />

        <ImageView
            android:id="@+id/TutorialSmartphone_Iv_Next"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="false"
            android:layout_marginTop="0dp"
            android:layout_marginEnd="0dp"
            android:layout_marginRight="0dp"
            android:layout_marginBottom="20dp"
            android:background="@drawable/buttonshape"
            android:onClick="nextPage"
            android:paddingTop="2dp"
            android:paddingBottom="2dp"
            android:scaleType="fitEnd"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:srcCompat="@drawable/triangle" />

        <Button
            android:id="@+id/TutorialSmartphone_Bt_Close"
            android:layout_width="wrap_content"
            android:layout_height="30dp"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="false"
            android:layout_marginTop="0dp"
            android:layout_marginEnd="0dp"
            android:layout_marginRight="0dp"
            android:layout_marginBottom="20dp"
            android:background="@drawable/buttonshape"
            android:onClick="nextPage"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:scaleType="fitEnd"
            android:text="closeVerb"
            android:textAllCaps="false"
            android:textColor="@color/white"
            android:visibility="gone"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent" />

        <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@id/TutorialSmartphone_Iv_Next"
            app:layout_constraintStart_toEndOf="@id/TutorialSmartphone_Iv_Prev"
            app:tabBackground="@drawable/tab_selector"
            app:tabGravity="center"
            app:tabIndicatorHeight="0dp" />
    </androidx.constraintlayout.widget.ConstraintLayout>

</RelativeLayout>

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>

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/black"/>
        </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="@color/gray"/>
        </shape>
    </item>
</layer-list>

所以两周后我发现了问题。在 styles.xml 中,我删除了 <item name="android:background">@color/white</item>,现在一切正常。感谢@Sozsoy,我尝试用我的代码创建新项目并比较可能导致问题的原因。