2017-12-13 25 views
0

Gradient色をMy androidアプリケーションのステータスバーに設定しようとしています。 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

関連する問題