2016-10-24 4 views
0

enter image description here У меня есть активность и фрагмент в моем проекте. В Управлении я установил макет, чтобы весь экран и в фрагменте я попытался изменить цвет строки состояния программно. Строка состояния отображается над макетом, но цвет не изменяется.Цвет панели состояния Android не меняется

активность:

if (Build.VERSION.SDK_INT > 16) { 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FULLSCREEN); 

     } 

Фрагмент:

if (Build.VERSION.SDK_INT > 16) { 
      getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, 
        WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
      if (Build.VERSION.SDK_INT >= 21) { 
       Log.e("statusbarcolor","changing.."); 
       getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(getContext(),R.color.statusBarColor)); 
      } 
     } 
+1

попробуйте эту ссылку Http: // StackOverflow .com/вопросы/22192291/how-to-change-the-status-bar-color-in-android и http://stackoverflow.com/a/26623245/2784663 – YLS

+2

http://stackoverflow.com/questions/26496411/android-material-status-bar-color-wont-change – sasikumar

+0

Убедитесь, что тестирование включено => 21 – Bills

ответ

3

Я думаю, проблема ваша Build.VERSION.SDK_INT раздел.

В моем случае (активность)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
    { 
     Window window = activity.getWindow(); 
     window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
     window.setStatusBarColor(Color.parseColor(#54d66a); 
    } 
+0

Это не работа – jobin

+0

@jobin https://developer.android.com/training/material/theme.html –

+0

@jobin добавить 'requestWindowFeature (Window.FEATURE_NO_TITLE),' 'перед тем setContentView (R. layout.' –

0

Просто попробуйте сделать:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    Window window = getWindow(); 
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
    window.setStatusBarColor(Color.BLUE); 
} 

Просто проверил это с ActionBarActivity и он работает нормально.

Примечание: Установка флага FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS программно не является необходимым, если ваш файл стилей значения-v21 имеет это установить уже через:

<item name="android:windowDrawsSystemBarBackgrounds">true</item> 

Создать метод в деятельности

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") 

В приведенном ниже разделе с помощью моего приложения:

.................. 
switch (position) { 
     case 0 : 
      fragment = new SampleOneFragment(); 
      color = R.color.ColorPrimaryDark; 
      break; 
     case 1: 
      fragment = new SampleOneFragment(); 
      color = R.color.AlertRed_dark; 
      break; 
     case 2: 
      fragment = new SampleOneFragment(); 
      color = R.color.ProgressBarPurple_dark; 
      break; 
    } 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
     getWindow().setStatusBarColor(ContextCompat.getColor(this, color)); 
    } 
    replaceFragment(fragment); 
} 
+0

Зачем использовать ** Устаревший ** 'ActionBarActivity' –

+0

android version 22.1.0, класс ActionBarActivity устарел. Вы должны использовать AppCompatActivity. –

+0

@Manikandan KI попробовал ваш код, он все еще не изменился – jobin

0

Я сделал это finally.I просто использовал следующий код в моем фрагменте:

getActivity().getWindow().clearFlags(WindowManager.FLAG_FULL_SCREEN); 
+0

omg !! маленький измененный .okay. –

0

пользователя этот код

if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) { 

      Window window = getWindow(); 
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
      window.setStatusBarColor(getResources().getColor(R.color.my_statusbar_color)); 
     } 
Смежные вопросы