Establecer el color de la barra de estado desde DialogFragment

Estoy creando una aplicación que cambia dinámicamente el color de la barra de estado.

Mi método en la clase principal de la actividad trabaja muy bien cuando se llama de cualquier fragmento. Los fragmentos se colocan en el buscapersonas de actividad:

public void setStatusBarColorIfPossible(int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().setStatusBarColor(color); } } 

Sin embargo, en DialogFragment que se crea en cualquier fragmento y se hace en pantalla completa, llamar a mi método no tiene ningún efecto. La barra de estado es instantáneamente negra (como se establece en styles.xml) y no puedo cambiarla.

 public class AddOrEditWeekPlanDialog extends DialogFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, R.style.MyDialog); } @Override public void onStart() { super.onStart(); Dialog d = getDialog(); if (d!=null){ int width = ViewGroup.LayoutParams.MATCH_PARENT; int height = ViewGroup.LayoutParams.MATCH_PARENT; d.getWindow().setLayout(width, height); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = inflater.inflate(R.layout.fragment_dialog, container, false); Button button = (Button)root.findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ((ThermostatActivity) getActivity()).setStatusBarColorIfPossible(0xFF0D47A1); } }); return root; } @Override public void onResume() { super.onResume(); } } 

Styles.xml:

 // Set in manifest for main activity <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> </style> // Set in dialog class <style name="MyDialog" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowIsFloating">false</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> </style> 

Resources.xml:

 <resources> <color name="colorPrimary">#FFB72020</color> <color name="colorPrimaryDark">#000</color> <color name="textColor">#fff</color> <color name="tabsScrollColor">#fff</color> </resources> 

Cualquiera puede explicarme por qué?

Con el fin de setStatusBarColor que necesita para establecer el flag: FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

"Indicador que indica que esta ventana es responsable de dibujar el fondo para las barras del sistema." (API de Google nivel 21)

Pruebe este código:

 public void setStatusBarColorIfPossible(int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); getWindow().setStatusBarColor(color); } } 
  • ¿Hay una diferencia entre getContext de Fragment y getContext del contenedor pasado a onCreateView of Fragment?
  • ViewPager of Fragment no muestra su contenido cuando el fragmento de raíz se reemplaza de nuevo
  • Teclado superpuesto EditText en clic
  • Cómo ir a fragmento de la actividad
  • Animar transiciones de elementos compartidos usando fragmentos de Android parece ser una pesadilla
  • SetOnTabSelectedListener está obsoleto se le pide al crear el diseño de la ficha
  • Creación de pestañas utilizando Fragmentos ahora que TabActivity está obsoleto
  • La adición dinámica de fragmentos con diseño xml a GridLayout no es workng
  • Android ViewPager llama manualmente a PageTransformer transformPage
  • ¿Debe un novato olvidarse de los fragmentos?
  • Android FragmentTransaction setTransitionStyle
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.