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:
- Cualquier mejora de código en la adición / sustitución de fragmentos
- Android: Elimina TODOS los FragmentTransactions de la pila trasera
- cómo establecer la fecha en la biblioteca android WeekView?
- Android Espresso: ViewPager no tiene instancia de adaptador
- Botón de acción flotante inesperado ancla cambio de gravedad
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é?
- Error en Spinner en una ventana emergente, se bloquea cuando se hace clic
- ¿Fragmento de acceso en la actividad?
- Navegación de la lista ActionBar Fragmentos superpuestos
- ¿Cómo recargar / refrescar el fragmento que ya se ha mostrado una vez?
- runOnUiThread () método en el fragmento
- Usos de etiquetas de fragmento
- Android: Fragment y ViewPager comienza siempre en la primera posición
- Vista previa de la cámara Android en un fragmento
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); } }