2016-10-16 6 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)); 
     } 
    } 

Но за это время мне нужно изменить цвет динамически. Я тестировал значение mock, но не работал. См. Мой код ниже.

В деятельности 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

Вы попробуйте установить такой же цвет, чтобы StatusBar, как у ActionBar? Если да, вы можете это сделать. Проверьте 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); 
    } 

`

 Смежные вопросы

  • Нет связанных вопросов^_^