11

Изначально я поставил свою активность, чтобы быть в режиме Immersive со следующим кодом:Строка состояния появляется, когда экранная клавиатура исчезает в то время как в режиме Immersive

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); 

Все отлично работает до пользователя нажимает на EditText и появляется мягкая клавиатура. Это приводит к тому, что Строка состояния держится сверху и никогда не прячется назад даже после исчезновения мягкой клавиатуры. Как ни странно, я столкнулся только с этой проблемой на телефонах LG/Samsung, телефоны Sony не имеют никаких проблем с этим. Кто-нибудь знает об этом?

+0

Вы нашли решение? – user18853

+4

Да :) По-видимому мне нужно добавить true в xml вашей деятельности –

+0

@AndriantoLie Ваш комментарий правильный. Пожалуйста, добавьте его в качестве ответа и примите его для будущих читателей. –

ответ

5

Используйте такой режим погружения.

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

Вот ваша функция режима погружения.

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); 
       } 

также называть immersiveMode() в OnResume(); Теперь строка состояния исчезнет по мере исчезновения вашей клавиатуры.

+3

В принципе правильный, но немного перебор: 1) Просто добавьте слушателя в свой onCreate(), не нужно его добавлять; 2) вам нужно только вызвать immersiveMode(), если видимость> 0 –

0

Вот мое решение для этого; Сначала я проверил, если мягкая клавиатура обнаружилась или нет:

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 
      } 
     } 
    }); 

И у меня есть метод hideNavBar(), который будет срабатывать при мягкой клавиатуре обнаружилась.

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); 
} 

}

Это решает проблему получения навигационной панели в то время как есть EditText быть набраны.

 Смежные вопросы

  • Нет связанных вопросов^_^