1

У меня есть пейджер с видом, заполненный тремя фрагментами, и вкладки представлены в виде точек. Я создал селектор с различными чертежами для выбранного или стандартного состояния, и он работает нормально. Однако для каждого выбранного фрагмента соответствующий индикатор точки должен иметь другой цвет. Для этого я реализовал следующие, но изменения цвета, установленные на tabSelectedListener, не имеют эффекта, цвета остаются теми, что указаны в файле dot_selector.Как сделать каждый выбранный индикатор точки разного цвета

PagerAdapter pagerAdapterWelcome = new PagerAdapter(getSupportFragmentManager(), listFragments); 
      viewPager.setAdapter(pagerAdapterWelcome); 

      final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabDots); 
      tabLayout.setupWithViewPager(viewPager, true); 

      tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
       @Override 
       public void onTabSelected(TabLayout.Tab tab) { 
        switch (tab.getPosition()) { 
         case 0: 
          tabLayout.setSelectedTabIndicatorColor(getResources().getColor(android.R.color.white)); 
          break; 
         case 1: 
          tabLayout.setSelectedTabIndicatorColor(getResources().getColor(android.R.color.black)); 
          break; 
        } 
       } 

       @Override 
       public void onTabUnselected(TabLayout.Tab tab) { 
        tabLayout.setSelectedTabIndicatorColor(getResources().getColor(android.R.color.darker_gray)); 
       } 

       @Override 
       public void onTabReselected(TabLayout.Tab tab) { 
        switch (tab.getPosition()) { 
         case 0: 
          tabLayout.setSelectedTabIndicatorColor(getResources().getColor(android.R.color.white)); 
          break; 
         case 1: 
          tabLayout.setSelectedTabIndicatorColor(getResources().getColor(android.R.color.black)); 
          break; 
        } 
       } 
     } 

Компоновка:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabDots" 
     android:layout_alignParentBottom="true" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     app:tabBackground="@drawable/dot_selector" 
     app:tabGravity="center" 
     app:tabIndicatorHeight="0dp"/> 
</RelativeLayout> 

dot_selector:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/dot_indicator_selected" 
     android:state_selected="true"/> 

    <item android:drawable="@drawable/dot_indicator_default"/> 
</selector> 

dot_indicator_selected:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape 
      android:innerRadius="0dp" 
      android:shape="ring" 
      android:thickness="4dp" 
      android:useLevel="false"> 
      <solid android:color="@android:color/black"/> 
     </shape> 
    </item> 
</layer-list> 

dot_indicator_default:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item> 
      <shape 
       android:innerRadius="0dp" 
       android:shape="ring" 
       android:thickness="4dp" 
       android:useLevel="false"> 
       <solid android:color="@android:color/darker_gray"/> 
      </shape> 
     </item> 
    </layer-list> 

ответ

0

You can refer this tutorial

Это работает для меня в мое приложение

В макет ресурса

<LinearLayout 
     android:id="@+id/layoutDots" 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/dots_height" 
     android:orientation="horizontal" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="@dimen/dots_margin_bottom" 
     android:gravity="center"> 
    </LinearLayout> 

В OnCreate метод метод

dotsLayout = (LinearLayout) findViewById(R.id.layoutDots);  
addBottomDots(numberOfDotsYouWant); 

addBottomDots()

private void addBottomDots(int currentPage) 
{ 
    dots = new TextView[layouts.length]; 

    dotsLayout.removeAllViews(); 
    for(int i = 0; i < dots.length; i++) 
    { 
     dots[i] = new TextView(this); 
     dots[i].setText(Html.fromHtml("&#8226;")); 
     dots[i].setTextSize(35); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
      dots[i].setTextColor(getColor(dot_light)); 
     else 
      dots[i].setTextColor(Color.LTGRAY); 
     dotsLayout.addView(dots[i]); 
    } 

    if(dots.length > 0) 
    { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) 
      dots[currentPage].setTextColor(getColor(dot_dark)); 
     else 
      dots[currentPage].setTextColor(Color.GRAY); 
    } 
} 
+0

Оригинальный источник из [здесь] (http://www.androidhive.info/2016/05/android-build-intro-slider-app/) – Piyush

+0

Да, но я изменил его, чтобы использовать его в моих просмотрщиках @Piyush – Dudupoo