2016-10-16 26 views
0

私はAndroidアプリケーションを開発中です。私のアプリでは、サーバーから来るカラーコードに従ってアクションバーの色を設定しています。背景色を設定しても問題ありません。しかし、私はまた、アクションバーのカラーコードに応じてステータスバーの色を変更したい。私は、色を暗くし、下のスクリーンショットのようにステータスバーに設定したいと思います。Androidのステータスバーの色を動的に設定すると機能しない

enter image description here

私が活動に

private void setStatusBarColor() 
    { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Window window = getWindow(); 

      // clear FLAG_TRANSLUCENT_STATUS flag: 
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 

      // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window 
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 

      // finally change the color 
      window.setStatusBarColor(getResources().getColor(R.color.statusBarColor)); 
     } 
    } 

をこのようなステータスバーの色を設定する。しかし、この時のために私はカラーを動的に変更する必要があります。私は模擬色の値でテストしましたが、動作しません。以下の私のコードを見てください。活動で

のonCreate

 teamColorCode = "#EB6343"; 
     if(teamColorCode!=null && !teamColorCode.isEmpty()) 
     { 
      int color = Color.parseColor(teamColorCode); 
      getSupportActionBar().setBackgroundDrawable(new ColorDrawable(color)); 
      //set for action bar 
      float[] hsv = new float[3]; 
      Color.colorToHSV(color,hsv); 
      hsv[2] *= 0.8f; // value component 
      color = Color.HSVToColor(hsv); 
      setStatusBarColor(color); 
     } 

あなたは私がteamColorCode変数にカラーコード値を割り当てる見ることができるようにする方法。その後、その色を濃くして、ステータスバーの色を設定しようとしました。これはステータスバーの色を設定する方法です。

private void setStatusBarColor(int color) 
    { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      Window window = getWindow(); 

      // clear FLAG_TRANSLUCENT_STATUS flag: 
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 

      // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window 
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 

      // finally change the color 
      if(color>0) 
      { 
       window.setStatusBarColor(color); 
      } 
      else{ 
       window.setStatusBarColor(getResources().getColor(R.color.statusBarColor)); 
      } 
     } 
    } 

これは私が得るものです:

enter image description here

あなたは、ステータスバーの色が変更されていない見ることができるように。アクションバーの色を暗くするステータスバーの色を変更するにはどうすればよいですか?

+0

を変更するために使用このコードはアクションバーを持っているとして、あなたはステータスバーに設定し、同じ色を試してみていますか?はいの場合はそれを行うことができます。 https://material.google.com/style/color.html#color-color-palette、ActionBarを500、StatusBarを700色に設定します。 –

+0

いいえ。アクションバーの色を暗くします。次に、ステータスバーに設定します。 –

+0

私のカラーコードは動的です。サーバーから来ています。 –

答えて

2

私は同じ効果を達成しようとしましたが、動的にステータスバーの暗い色を生成するようにしました。どのように行ったのかを見てください。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    Window window = this.getWindow(); 
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
    window.setStatusBarColor(getDarkColor(Color.GREEN, 0.7)); 
} 

暗い色の生成方法(値が小さいほど、色が暗くなります)。

public int getDarkColor(int color, double value) { 
    int r = Color.red(color); 
    int g = Color.green(color); 
    int b = Color.blue(color); 
    return Color.rgb((int) (r * value), (int) (g * value), (int) (b * value)); 
} 
+0

私は試しました。しかし、それは動作していません。 : –

+0

同じ結果が出ました –

+0

あなたのAndroidバージョンはLollipop以上ですか? –

0

ステータスバーの色(ツールバーの色そして暗い)

factor=0.8f; 
    int a = Color.alpha(toolbarcolor); 
    int r = Math.round(Color.red(toolbarcolor) * factor); 
    int g = Math.round(Color.green(toolbarcolor) * factor); 
    int b = Math.round(Color.blue(toolbarcolor) * factor); 
    int statusColor=Color.argb(a, 
      Math.min(r, 255), 
      Math.min(g, 255), 
      Math.min(b, 255)); 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     Window window = MainActivity.this.getWindow(); 
     window.setStatusBarColor(statusColor); 
    } 

`

関連する問題