2017-08-08 77 views
0

實際上,我想每次更改TabLayoutStatusBarToolbar的顏色。正確更改分段中狀態欄,工具欄和TabLaylout的顏色

更改片段,如:

  • 片段1:藍色
  • fragment2:紅色
  • fragment3:黃色
  • 片段4:橙色。

顏色正在改變,但不是根據我給出的,它隨機挑選顏色。 我在main中創建了一個方法「changeHeader()」,並在片段中調用該方法。

主要活動方法

public void changeHeader(int toolbarcolor, int statusbarcolor, int tablayoutcolor) { 
    toolbar.setBackgroundColor(toolbarcolor); 
    tabLayout.setBackgroundColor(tablayoutcolor); 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ 
     getWindow().setStatusBarColor(statusbarcolor); 
    } 
    navHeader.setBackgroundColor(tablayoutcolor); 
} 

撥打片段1

((Main)getActivity()).changeHeader(
       getResources().getColor(R.color.blue1), 
       getResources().getColor(R.color.blue2), 
       getResources().getColor(R.color.blue3) 
     ); 

調用片段2

((Main)getActivity()).changeHeader(
       getResources().getColor(R.color.red1), 
       getResources().getColor(R.color.red2), 
       getResources().getColor(R.color.red3) 
     ); 

在片段3

((Main)getActivity()).changeHeader(
       getResources().getColor(R.color.yellow1), 
       getResources().getColor(R.color.yellow2), 
       getResources().getColor(R.color.yellow3) 
     ); 
調用

在片段4

((Main)getActivity()).changeHeader(
       getResources().getColor(R.color.orange1), 
       getResources().getColor(R.color.orange2), 
       getResources().getColor(R.color.orange3) 
     ); 

我在片段的onCreateView稱爲 「changeHeader」 電話,請爲我提供解決方案。

+0

在'onAttach()'方法中獲取您的活動引用並調用您的'chageHeader()'方法。 – Piyush

+0

是的,如果您確實調用片段onAttach()中的'changeHeader()'方法,它將確保創建片段並將其附加到活動時,它將調用此方法。 –

回答

0

這是因爲您的選項卡布局,它一次初始化三個選項卡(當前,上一個和下一個)。您應該創建一個PageChangeListener並將其添加到您的ViewPager。

創建PageChangeListener

public class DetailOnPageChangeListener extends ViewPager.SimpleOnPageChangeListener { 

    private int currentPage; 

    @Override 
    public void onPageSelected(int position) { 
     currentPage = position; 
     String colorCode = "#FFFFFF"; 
     Toast.makeText(getActivity(), "Position: " + position, Toast.LENGTH_SHORT).show(); 
     switch (position) { 
      case 0: 
       colorCode = "#FF0000"; 
       break; 
      case 1: 
       colorCode = "#00FF00"; 
       break; 
      case 2: 
       colorCode = "#0000FF"; 
       break; 
      case 3: 
       colorCode = "#33BCFD"; 
       break; 
      case 4: 
       colorCode = "#F44CFD"; 
       break; 
      case 5: 
       colorCode = "#FAB55D"; 
       break; 
      case 6: 
       colorCode = "#6ABCF6"; 
       break; 
      case 7: 
       colorCode = "#F777FD"; 
       break; 
      case 8: 
       colorCode = "#FAB888"; 
       break; 
      case 9: 
       colorCode = "#999CFD"; 
       break; 
      case 10: 
       colorCode = "#F00CFD"; 
       break; 
     } 
     ((MainActivity)getActivity()).changeHeader(colorCode); 
    } 

    public final int getCurrentPage() { 
     return currentPage; 
    } 
} 

添加監聽到你的ViewPager

DetailOnPageChangeListener myPageChangeListener = new DetailOnPageChangeListener(); 
mViewPager.addOnPageChangeListener(myPageChangeListener); 

刪除監聽器在銷燬方法

mViewPager.removeOnPageChangeListener(myPageChangeListener); 

在你changeHeader方法MainActivity看起來應該像這樣

public void changeHeader(String toolbarcolor) { 
    this.getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor(toolbarcolor))); 
} 
+1

感謝兄弟,爲我工作 – gaurav