2017-12-13 4 views
0

Gradient을 안드로이드 애플리케이션의 상태 표시 줄에 설정하려고합니다. Activity의 경우 BaseActivity에 코드 아래에 배치했습니다. 잘 작동합니다.그래디언트 색상을 상태 표시 줄 부분으로 설정하십시오.

public void setStatusBarColor() 
{ 
    try 
    { 
     Window window = getWindow(); 
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
     { 
      Drawable background = this.getResources().getDrawable(R.drawable.gradient); 
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      window.setStatusBarColor(this.getResources().getColor(R.color.transparent)); 
      window.setNavigationBarColor(this.getResources().getColor(R.color.transparent)); 
      window.setBackgroundDrawable(background); 
     } 
    } 
    catch (Exception ex) 
    { 
     GSLogger.e(ex); 
    } 
} 

이제 Fragment에 동일한 그래디언트 색상을 적용하고 싶습니다. 나는 거의 8가있는 내비게이션 서랍을 가지고있다. fragments. 이 그라디언트 색상을 상태 표시 줄에 적용하고 싶습니다. 위의 코드가 BaseFragment에 적용되었습니다. 어떤 색상에도 영향을 미치지 않습니다. 하지만 단일 색상 코드를 적용하면 정상적으로 작동합니다. 다음은 아래 코드입니다.

public void setStatusBarColor() 
{ 
    try 
    { 
     Window window = getActivity().getWindow(); 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
     { 
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
      window.setStatusBarColor(getResources().getColor(R.color.black)); 
     } 
    } 
    catch (Exception ex) 
    { 
     GSLogger.e(ex); 
    } 
} 

여기에는 어떤 문제가있을 수 있습니까? 조각에 그라디언트 색상을 적용 할 수 없습니다. 그러나 동일한 코드가 Activity에 대해 잘 작동합니다.

도움을 받으실 수 있습니다.

답변

0

조각이 활동의 ​​일부 여야합니다. 이 코드를 액티비티에 작성하고 프래그먼트에서 호출 할 수 있습니다.

public void updateStatusBarColor(String color){// Color must be in hexadecimal fromat 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    Window window = getWindow(); 
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    window.setStatusBarColor(Color.parseColor(color)); 
} } 

전화 당신의 조각에서이 방법

((ActivityName)getActivity()).updateStatusBarColor("#000000") 
+0

가 어떻게 그라데이션 색상을 적용 할 수 있는가? 앞서 말했듯이 단색이 잘 작동합니다. Gradient Color에 문제가 있습니다. – Jacky

+0

@Jacky 어쩌면이 링크로 문제를 해결할 수도 있습니다. https://www.whatsthatlambda.com/android/how-to-gradient-color-toolbar-and-statusbar – Kinjal

관련 문제