ich die Navigationsleiste Aktivität Projektvorlage von Android Studio verfeinert, dieToolbar verwendet, v7.app.ActionBarDrawerToggle und NavigationView anstelle des NavigationDrawerFragment (und das Layout/fragment_navigation_drawer .xml).Overlapping Schatteneffekt bleibt auf Navigationsleiste des NavigationView
Es funktioniert perfekt. Dann gehe ich weiter. Ich habe mein Navigationsschubladen-Projekt in immersive-sticky (Vollbildmodus).
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
View decorationView = getWindow().getDecorView();
decorationView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
...
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(
this,
drawerLayout,
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
R.string.navigation_drawer_close /* "close drawer" description for accessibility */
) {
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
}
};
drawerLayout.setDrawerListener(drawerToggle);
navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(this);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (drawerToggle.onOptionsItemSelected(item)) {
return true;
}
...
}
Ein Problem ist gestiegen. Die überlappenden Schatten auf der Navigationsansicht, die von der Statusleiste (auf der oberen Seite) und der Navigationsleiste (auf der unteren Seite) abgeleitet sind, bleiben stehen.
Wie kann ich sie loswerden?
Ich überprüfte Quellen von v7.app.ActionBarDrawerToggle oder NavigationView von Android, aber vergeblich.
Aktualisiert:
Dank für die Beratung des @ lcw_gg, ich habe völlig von der Statusleiste des Schatten losgeworden (während der Schatten der Navigationsleiste bleibt). Das ist android:windowFullscreen
Attribut true
in Layout-XML festzulegen.
Aber ich möchte dies in Java-Code tun. Ich fand einen Weg, und wahrscheinlich ist es auf die xml Weise gleichwertig:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
Und dies zu tun, brauchen Sie nicht mehr diese beiden Flags zu setzen - View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
und View.SYSTEM_UI_FLAG_FULLSCREEN
- zum decorationView
.
Dennoch finde ich die Art und Weise nicht von der Navigationsleiste des Schatten loszuwerden. Ich warte auf eine Lösung.
Welche API-Ebenen tritt dieses Problem auftreten, auf? Ist es alles von ihnen oder nur Post-Lollipop? – PPartisan
@PPartisan Mein Gerät ist 5.1.1 (API-22 Lollipop; Nexus7). Ich habe noch keine anderen Geräte untersucht. – hata
Vielleicht lohnt es sich in diesem Fall mit 'android: height' Attributen in Ihren 'layout'' xml' Dateien zu experimentieren. Ich habe ähnliche Leiden in der Vergangenheit erlebt, als ich die Höhe vergessen habe. – PPartisan