11

Zunächst meine Aktivität Ich habe mit dem folgenden Code in Fesselnde Modus sein:Statusleiste angezeigt wird, wenn Soft-Tastatur erscheint, aber nicht versteckt zurück, wenn Soft-Tastatur verschwindet, während in Fesselnde Modus

View decorView = getWindow().getDecorView(); 
decorView.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); 

Alles funktioniert, bis der Benutzer Fein Klickt auf einen EditText und die Soft-Tastatur erscheint. Es bewirkt, dass die Statusleiste oben bleibt und sich nie wieder verbirgt, auch wenn die Softtastatur nicht mehr angezeigt wird. Seltsamerweise stoße ich nur auf LG/Samsung-Handys auf dieses Problem, Sony-Handys haben damit kein Problem. Hat jemand eine Idee?

+0

Haben Sie eine Lösung gefunden? – user18853

+4

Ja :) anscheinend muss ich hinzufügen true zu meiner Aktivität xml –

+0

@AndiantoLie Ihr Kommentar ist der richtige. Bitte fügen Sie es als Antwort hinzu und akzeptieren Sie es für zukünftige Leser. –

Antwort

5

Verwenden Sie den immersiven Modus wie folgt.

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     super.onWindowFocusChanged(hasFocus); 
     immersiveMode(); 
     getWindow().getDecorView().setOnSystemUiVisibilityChangeListener 
      (new View.OnSystemUiVisibilityChangeListener() { 
       @Override 
       public void onSystemUiVisibilityChange(int visibility) { 
        immersiveMode(); 
       } 
      }); 
    } 

Hier ist Ihre Immersive-Modus-Funktion.

public void immersiveMode() { 
     final View decorView = getWindow().getDecorView(); 
     decorView.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); 
       } 

auch anrufen immersiveMode() in onResume(); Die Statusleiste verschwindet nun, wenn die Softkey-Tastatur verschwindet.

+3

Grundsätzlich korrekt, aber ein bisschen Overkill: 1) Fügen Sie einfach den Listener in Ihrem onCreate() hinzu, ohne dass Sie ihn hinzufügen müssen; 2) Sie müssen den immersiveMode() nur aufrufen, wenn Sichtbarkeit> 0 ist –

0

Hier ist meine Lösung dafür; Zuerst habe ich gecheckt, ob Soft-Tastatur auftaucht ist oder nicht:

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 

      Rect r = new Rect(); 
      getWindow().getDecorView().getWindowVisibleDisplayFrame(r); 
      int screenHeight = getWindow().getDecorView().getRootView().getHeight(); 

      int keypadHeight = screenHeight - r.bottom; 

      //Log.d(TAG, "keypadHeight = " + keypadHeight); 

      if (keypadHeight > screenHeight * 0.15) { 
       //Keyboard is opened 
       hideNavBar(); 
      } 
      else { 
       // keyboard is closed 
      } 
     } 
    }); 

Und ich habe eine hideNavBar() -Methode ausgelöst werden, wenn Soft-Tastatur ist auftaucht.

private void hideNavBar() { 
if (Build.VERSION.SDK_INT >= 19) { 
    View v = getWindow().getDecorView(); 
    v.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); 
} 

}

Dies löst das Problem der Navigationsleiste bekommen, während es eine EditText ist eingegeben werden.

Verwandte Themen