Android 监听键盘弹出和收起.

entends:http://stackoverflow.com/questions/36837066/how-to-validate-virtual-keyboard-visibility

监听键盘弹出和收起.

/*
Somewhere else in your code
*/

RelativeLayout mainLayout = findViewById(R.layout.main_layout); // You must use your root layout
InputMethodManager im = (InputMethodManager) getSystemService(Service.INPUT_METHOD_SERVICE);     

/*
Instantiate and pass a callback
*/

SoftKeyboard softKeyboard;
softKeyboard = new SoftKeyboard(mainLayout, im);
softKeyboard.setSoftKeyboardCallback(new SoftKeyboard.SoftKeyboardChanged()
{
 @Override  
  public void onSoftKeyboardHide()   
  {
        // Code here  
  }  

  @Override 
   public void onSoftKeyboardShow()  
   { 
       // Code here 
   }   
});     

/*
Open or close the soft keyboard programatically
*/

softKeyboard.openSoftKeyboard();
softKeyboard.closeSoftKeyboard();


/*
SoftKeyboard can catch keyboard events when an EditText gains focus and keyboard appears
*/


/* Prevent memory leaks:
*/

@Override
public void onDestroy()
{  
  super.onDestroy(); 
   softKeyboard.unRegisterSoftKeyboardCallback();
}
final View parentView= findViewById(R.id.myrootview);  
       parentView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            int heightDiff = root.getRootView().getHeight() - root.getHeight();

            Rect rectgle= new Rect();
            Window window= getWindow();
            window.getDecorView().getWindowVisibleDisplayFrame(rectgle);
            int contentViewTop= 
                window.findViewById(Window.ID_ANDROID_CONTENT).getTop();

            if(heightDiff <= contentViewTop){
                //Soft KeyBoard Hidden---button visible

            }else{
                //Soft KeyBoard Shown---button hide
            }


         }
    });
原文地址:https://www.cnblogs.com/niray/p/5437320.html