Ho riscontrato un problema che influisce sull'altezza del layout relativo mentre stavo cercando di aggiungere il colore alla barra di stato."FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS" riguarda getRootView(). GetHeight()
adding Flag interessato dal calcolo dei relativi layout altezza di rootView.
private void changeStatusBarColor(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.red_e31837));
}
}
Ho un osservatore di viste dell'albero che mi aiuta a tracciare l'altezza di rootView.
private ViewTreeObserver.OnGlobalLayoutListener keyboardLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int heightDiff = wrapper.getRootView().getHeight() - wrapper.getHeight();
}
int heightDiff
uguale a 1920 se uso FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS
ma se io non uso changeStatusBarColor()
, int heightDiff
uguale al 1776 (calcola senza ActionBar e statusbar immagino). Ma perché l'aggiunta di questo flag cambia i calcoli? Grazie in anticipo!
Se si passa a quella bandiera, il gestore di finestre offre spazio aggiuntivo per disegnare nell'area della barra di sistema. Non è necessario passare questo flag per impostare il colore della barra di stato, è sufficiente la chiamata a 'setStatusBarColor (int)'. – alanv
@alanv Grazie, ho capito il motivo; ma se non utilizzo flag, il colore della barra di stato non cambia. L'ho provato all'inizio del mio lavoro. Sai perché potrebbe accadere? – MiloRambaldi
@MiloRambaldi, Ciao! Risolvi questo problema? – BArtWell