2017-01-17 2 views
0

private int currentApiVersion;Панель навигации становится видимой снова после открытия и закрытия клавиатуры

private void hideNavigationBar() { 
    currentApiVersion = android.os.Build.VERSION.SDK_INT; 

    final int flags = 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; 

    // This work only for android 4.4+ 
    if (currentApiVersion >= Build.VERSION_CODES.KITKAT) { 

     getWindow().getDecorView().setSystemUiVisibility(flags); 

     // Code below is to handle presses of Volume up or Volume down. 
     // Without this, after pressing volume buttons, the navigation bar will 
     // show up and won't hide 
     final View decorView = getWindow().getDecorView(); 
     decorView 
       .setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { 

        @Override 
        public void onSystemUiVisibilityChange(int visibility) { 
         if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { 
          decorView.setSystemUiVisibility(flags); 
         } 
        } 
       }); 
    } 

} 


@SuppressLint("NewApi") 
@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    if (currentApiVersion >= Build.VERSION_CODES.KITKAT && hasFocus) { 
     getWindow().getDecorView().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); 
    } 
} 

Я вызвал метод hideNavigationBar из onCreate, но его не работает для меня. когда я открываю keybard при нажатии EditText, а затем закрываю клавиатуру, но панель навигации не становится невидимой.

ответ

0

При закрытии клавиатуры вам необходимо скрыть навигационную панель. Для этого см. Код ниже. Это поможет вам

final View activityRootView = ((ViewGroup) getActivity().findViewById(android.R.id.content)).getChildAt(0); 

activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     private final int DefaultKeyboardDP = 100; 
     private final int EstimatedKeyboardDP = DefaultKeyboardDP + (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ? 48 : 0); 
     private final Rect r = new Rect(); 
     private boolean wasOpened; 
     @Override 
     public void onGlobalLayout() { 
      // Convert the dp to pixels. 
      int estimatedKeyboardHeight = (int) TypedValue 
        .applyDimension(TypedValue.COMPLEX_UNIT_DIP, EstimatedKeyboardDP, activityRootView.getResources().getDisplayMetrics()); 
      // Conclude whether the keyboard is shown or not. 
      activityRootView.getWindowVisibleDisplayFrame(r); 
      int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); 
      boolean isShown = heightDiff >= estimatedKeyboardHeight; 
      if (isShown == wasOpened) { 
       Log.d("Keyboard state", "Ignoring global layout change..."); 
       return; 
      } 
      wasOpened = isShown; 
      if (isShown) { 
       // Show keyborad 
      } else { 
       // Hide keyboard 
      } 
     } 
    }); 
+0

не работает –

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