簡體   English   中英

如何在android中按索引更改tablayout指示器顏色?

[英]how to change tablayout indicator color by index in android?

我在我的活動中有一個視圖 pager2 和 tablayout 附加到這個 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();

我的目標是讓用戶看到在上一個選項卡中選擇的指示器顏色,因此如果用戶轉到下一個選項卡,則前一個選項卡必須按所選顏色進行着色,如下圖所示

在此處輸入圖片說明

在此處輸入圖片說明

圖像顯示第一個指示器被選中並在轉到下一個片段時保持選中狀態,因此它可以像一個進度條

我選擇通過索引以編程方式設置指示器顏色,如何?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM