как изменить цвет индикатора tablayout по индексу в Android?

#android #android-tablayout #android-viewpager2

Вопрос:

У меня есть ViewPager2 в моей деятельности и TabLayout прикреплено к этому viewpager2 , как показано ниже:

 lt;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" /gt; lt;androidx.viewpager2.widget.ViewPager2  android:layout_width="match_parent"  android:layout_height="match_parent"  android:id="@ id/vpager"/gt;  

Я прикрепил 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();  

Моя цель-сохранить цвет индикатора, выбранный на предыдущей вкладке, видимым пользователем, поэтому, если пользователь перейдет на следующую вкладку, предыдущая должна быть окрашена как выбранная, как на изображениях ниже

введите описание изображения здесь

введите описание изображения здесь

На изображениях показано, что выбран первый индикатор, и сохраняйте его выбранным при переходе к следующему фрагменту, чтобы он мог быть похож на индикатор выполнения.

Я выбираю программную настройку цвета индикатора по индексу, как?

Ответ №1:

Функциональность TabLayout цвета индикатора ограничена текущей выбранной вкладкой TabLayout ; поэтому она влияет только на текущую вкладку, а не на любую другую вкладку.

Вместо этого вы можете использовать a ProgressBar для этого и устанавливать прогресс при ViewPager каждом изменении страницы:

Расположение

 lt;ProgressBar  android:id="@ id/progress_bar"  style="?android:attr/progressBarStyleHorizontal"  android:layout_width="match_parent"  android:layout_height="wrap_content" /gt;  lt;androidx.viewpager2.widget.ViewPager2  android:id="@ id/intro_pager"  android:layout_width="match_parent"  android:layout_height="match_parent" /gt;  

Поведение

 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);  } });