2016-10-24 14 views
0

enter image description here Ich habe eine Aktivität und ein Fragment in meinem Projekt.In der Aktivität habe ich das Layout nehmen Sie den gesamten Bildschirm und im Fragment Ich versuche, die Statusleiste Farbe programmgesteuert ändern. Die Statusleiste wird über dem Layout angezeigt, aber die Farbe wird nicht geändert.Android Statusleiste Farbe nicht geändert

Aktivität:

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

     } 

Fragment:

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

diesen Link http versuchen: // Stackoverflow .com/questions/22192291/how-to-change-the-statusbar-color-in-android und http://stackoverflow.com/a/26623245/2784663 – YLS

+2

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

+0

Stellen Sie sicher, dass Sie Tests durchführen => 21 – Bills

Antwort

3

Ich denke, Problem ist Ihr Build.VERSION.SDK_INT Abschnitt.

In meinem Fall (Aktivität)

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

Es hat nicht funktioniert – jobin

+0

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

+0

@jobin hinzufügen 'requestWindowFeature (Window.FEATURE_NO_TITLE);' vor 'setContentView (R. Layout.' –

0

Versuchen Sie einfach tun:

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); 
} 

gerade getestet dies mit ActionBarActivity und es funktioniert gut.

Hinweis: Einstellen der FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS Flag ist programmatisch nicht erforderlich, wenn Sie Ihre Werte-v21 Stile Datei wurde bereits festgelegt, über:

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

Erstellen Sie eine Methode in Ihrer Tätigkeit

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)); 
    } 
} 

Rufen Sie diese Methode von Ihrem Fragment

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

In folgenden angegeben mit meiner Anwendung:

.................. 
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

Warum verwenden ** Veraltet ** 'ActionBarActivity' –

+0

Android-Version 22.1.0, die Klasse ActionBarActivity ist veraltet. Sie sollten AppCompatActivity verwenden. –

+0

@Manikandan K Ich habe versucht, Ihren Code, es hat sich noch nicht geändert – jobin

0

Ich habe es finally.I einfach den Code unten in meinem Fragment verwendet:

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

omg !! kleine veränderte .okay .Move ahead –

0

dieser Benutzercode

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)); 
     } 
Verwandte Themen