【问题标题】:how to change tablayout indicator color by index in android?如何在android中按索引更改tablayout指示器颜色?
【发布时间】:2021-12-11 23:30:57
【问题描述】:

我的活动中有一个ViewPager2TabLayout 附加到这个viewpager2,如下所示:

 <com.google.android.material.tabs.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    app:tabIndicatorColor="@color/colorPrimary"
    app:tabMode="fixed"
    android:layout_height="2dp" />
<androidx.viewpager2.widget.ViewPager2
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/vpager"/>

我已将TabLayout 附加到ViewPager,如下所示

   new TabLayoutMediator(tabLayout, vpager,
            new TabLayoutMediator.TabConfigurationStrategy() {
                @Override public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                        @Override
                        public void onTabSelected(TabLayout.Tab tab) {

                        }

                        @Override
                        public void onTabUnselected(TabLayout.Tab tab) {
                    
                        }

                        @Override
                        public void onTabReselected(TabLayout.Tab tab) {

                        }
                    });     
                }
            }).attach();

我的目标是让用户看到上一个标签中选择的指示器颜色,所以如果用户转到下一个标签,前一个必须是选中的颜色,如下图所示

图像显示第一个指示器被选中,并在转到下一个片段时保持选中状态,因此它可以像一个进度条。

我选择通过索引以编程方式设置指标颜色,如何?

【问题讨论】:

    标签: android android-tablayout android-viewpager2


    【解决方案1】:

    TabLayout 指示器颜色功能仅限于TabLayout 的当前选定选项卡;所以它只影响当前选项卡;不是任何其他选项卡。

    相反,您可以为此使用ProgressBar 并在ViewPager 更改页面时设置进度:

    布局

    <ProgressBar
        android:id="@+id/progress_bar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    
    <androidx.viewpager2.widget.ViewPager2
        android:id="@+id/intro_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    

    行为

    ProgressBar progressBar = findViewById(R.id.progress_bar);
    
    progressBar.max = pageCount // Change pageCount to the number of pages in your ViewPager2
    
    mViewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            progressBar.setProgress(position + 1);
        }
    
        @Override
        public void onPageSelected(int position) {
            progressBar.setProgress(position + 1);
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2015-09-03
      • 2016-09-14
      • 1970-01-01
      • 2021-12-26
      • 2016-09-27
      • 2017-03-21
      • 2012-12-09
      • 2023-03-29
      • 1970-01-01
      相关资源
      最近更新 更多