Android 如何判断软键盘是否弹出(显示)

开发中,有时候退出界面的时候,如果键盘弹出的情况下,需要先关闭键盘,然后再退出Activity的话,改如何操作呢,请看下面的几种方式 ?


if (inputMethodManager.isActive(editText)) {  
    Toast.makeText(MainActivity.this, "显示", Toast.LENGTH_SHORT).show();  
} else {  
    Toast.makeText(MainActivity.this, "没显示", Toast.LENGTH_SHORT).show();  
}

这个办法弊病在于只要editText有焦点,就一直是true,然而并不是editText获得焦点键盘就会弹出。无卵用。

由于谷歌官方并没有提供与判断软键盘是否弹出的相关方法,只能通过计算布局高度来解决:


private boolean isSoftShowing() {
  // 获取当前屏幕内容的高度
  int screenHeight = getWindow().getDecorView().getHeight();
  // 获取View可见区域的bottom
  Rect rect = new Rect();
  // DecorView即为activity的顶级view
  getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
  // 考虑到虚拟导航栏的情况(虚拟导航栏情况下:screenHeight = rect.bottom + 虚拟导航栏高度)
  // 选取screenHeight*2/3进行判断
  return screenHeight*2/3 > rect.bottom;
}

这里面用了一个巧方法,就是选取屏幕高度的2/3来判断,如果你觉得这个不靠谱的话,也可以获取到虚拟导航栏的高度,进行相应判断。

附上获取导航栏的方法:


/** 
  * 底部虚拟按键栏的高度 
  * @return 
*/  
  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)  
  private int getSoftButtonsBarHeight() {  
      DisplayMetrics metrics = new DisplayMetrics();  
      // 这个方法获取可能不是真实屏幕的高度  
      mActivity.getWindowManager().getDefaultDisplay().getMetrics(metrics);  
      int usableHeight = metrics.heightPixels;  
      // 获取当前屏幕的真实高度  
      mActivity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics);  
      int realHeight = metrics.heightPixels;  
      if (realHeight > usableHeight) {  
          return realHeight - usableHeight;  
      } else {  
          return 0;  
      }  
  }

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值