2017-08-30 24 views
0

私はTabLayoutのタブアイコンの色を変更しようとしていますが、実際にはaddOnTabSelectedListenerを使用してこれを実現しましたが、これはタブ間でスワイプする場合にのみ有効です。だから、最初のタブのアイコンの色は、タブを変更したときの色と同じにしたいと思っています。ViewPagerOnTabSelectedListenerをプログラムで呼び出すにはどうすればよいですか?

私はviewPager.setCurrentItem()を試しましたが、これは、渡されたインデックスが0(最初のタブ)と異なる場合にのみ機能します。

したがって、どのようにしてViewPagerOnTabSelectedListenerをプログラムで呼び出すことができますか?

これは私のコードです:拳の時間のためにそれを実行したときに

tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager) { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab){ 
      super.onTabReselected(tab); 
      int tabIconColor = ContextCompat.getColor(MainActivity.this,R.color.prehipertension); 
      tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab){ 
      super.onTabUnselected(tab); 
      int tabIconColor = ContextCompat.getColor(MainActivity.this,R.color.blancoTransparencia); 
      tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 
      int tabIconColor = ContextCompat.getColor(MainActivity.this,R.color.blanco); 
      tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN); 
     } 
    }); 

    viewPager.setCurrentItem(0); 

これはアプリです。 tablayout

2番目のタブにスワイプして(最初のタブに戻ったとき)、アイコンの色が正しく変更されます。

tablayout icon enter image description here

答えて

0

私が正しくかどうか、あなたの問題を理解できるか分からないが、私はポケットベルビューと協力して、このアルゴリズムによってプロセスを扱うのです。 (多分あなたが望むものを見つけたかどうかチェックしてください)。

1-最初にあなたのタブを特定します。

private void createTabIcons(){ 
    // i get custom tab view. 
    View profileTab = LayoutInflater.from(this) 
      .inflate(R.layout.custom_tab,null); 
    // set it's views such as its text and icon 
    ViewAppHolder.CustomTabViewHolder customTabProfileViewHolder = 
      new ViewAppHolder.CustomTabViewHolder(profileTab); 
    // set properties of icon ... note this is my main tab so i set 'color.active' 
    customTabProfileViewHolder.TAB_IMAGE_VIEW 
      .setImageDrawable(getDrawable(R.drawable.ic_person_black_24dp)); 
    customTabProfileViewHolder.TAB_IMAGE_VIEW 
      .setColorFilter(ContextCompat.getColor(this,R.color.active_tab)); 

    tabLayout.getTabAt(Constants.USER_PROFILE_TAB).setCustomView(profileTab); 
    // it's the next tab by the same previous steps 
    View friendsTab = LayoutInflater.from(this) 
      .inflate(R.layout.custom_tab,null); 

    ViewAppHolder.CustomTabViewHolder customTabFriendsViewHolder = 
      new ViewAppHolder.CustomTabViewHolder(friendsTab); 
    // the diff is here .. i set the color of icon 'color.non_active' 
    customTabFriendsViewHolder.TAB_IMAGE_VIEW 
      .setImageDrawable(getDrawable(R.drawable.ic_group_black_24dp)); 
    customTabFriendsViewHolder.TAB_IMAGE_VIEW 
      .setColorFilter(ContextCompat.getColor(this,R.color.non_active_tab)); 

/// .... and remain tabs also have the same thing with color non_active. 

2-両方onTabSelectedonTabUnselectedに私はちょうどsetCurrentTab()というメソッドを呼び出し、それが実装だあること

private void setCurrentTab() { 
    if (tabLayout != null) { 
     int currentPosition = tabLayout.getSelectedTabPosition(); 
     int unSelectedTabs = currentPosition; 

     do { 
      unSelectedTabs = (unSelectedTabs + 1) % 4; 

      Log.e("un selected ", String.valueOf(unSelectedTabs)); 
      Log.e("un selected ", String.valueOf(currentPosition)); 

      ViewAppHolder.CustomTabViewHolder customTabViewHolder = 
        new ViewAppHolder.CustomTabViewHolder(
          tabLayout.getTabAt(unSelectedTabs).getCustomView() 
        ); 


      if (unSelectedTabs != currentPosition) { 
       customTabViewHolder.TAB_IMAGE_VIEW 
         .setColorFilter(ContextCompat.getColor(this, R.color.non_active_tab)); 
      } else { 
       customTabViewHolder.TAB_IMAGE_VIEW 
         .setColorFilter(ContextCompat.getColor(this, R.color.active_tab)); 
      } 

     } while (unSelectedTabs != currentPosition); 
    } 
} 
関連する問題