2016-07-22 20 views
0

Zuerst durchscheinend Statusleiste aktiviertDrawerLayout Artefakt nach disable durchscheinend Statusleiste

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 

nach Bedarf dynamisch deaktivieren

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 

Nach dem Deaktivieren angezeigt seltsamen Artefakt (transluzent Linie), wie auf pic

enter image description here

UPD Beispielprojekt auf github

Antwort

0

Nach Recherche fand ich Lösung und schreiben benutzerdefinierte Klasse

public class DrawableLayoutFullScreen extends DrawerLayout { 

    public DrawableLayoutFullScreen(Context context) { 
     this(context,null); 
    } 

    public DrawableLayoutFullScreen(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      setOnApplyWindowInsetsListener((v, insets) -> { 
       final DrawableLayoutFullScreen drawerLayout = (DrawableLayoutFullScreen) v; 
       drawerLayout.setWillNotDraw(insets.getSystemWindowInsetTop() <= 0 && getBackground() == null); 
       drawerLayout.requestLayout(); 
       return insets.consumeSystemWindowInsets(); 
      }); 
     } 
    } 

    @Override 
    public void setFitsSystemWindows(boolean fitSystemWindows) { 
     if (fitSystemWindows) { 
      setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 
     } else { 
      setSystemUiVisibility(0); 
     } 
     super.setFitsSystemWindows(fitSystemWindows); 
    } 
} 

Wenn Anruf setFitsSystemWindows(true) DrawableLayoutFullScreen Fenster füllen und wird über Statusleiste ziehen. Danach müssen die Padding- und Ränder für untergeordnete Ansichten

eingerichtet werden