问题描述
我正在使用带有静态数字 od 页面的简单 ViewPager2,我想在其中添加点指示器。我找到了许多示例,我已经使用 TabLayouMediator 在页面底部有工作指示器,但我看不到这些点。当我点击指示器的位置时,它会切换页面并且可以看到按钮单击的效果。无论如何,我看不到默认和活动的点图像。点指示符是从 stackoverflow 教程中使用的。
由于指标可以切换页面,我认为 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,我尝试用我的代码创建新项目并比较可能导致问题的原因。