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