安卓开发——如何判断软键盘是否弹出(显示)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28484355/article/details/78882269

在开发中涉及到了如下情况:表情界面与软键盘只显示其一,与当前主流社交软件的逻辑一致。

这时就需要根据情况获取当前软键盘是否处于弹出状态,网上搜了搜,都是一些拷贝来拷贝去的无用办法,如:

1、

if(getWindow().getAttributes().softInputMode == WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE){  
    Toast.makeText(Main3Activity.this, "显示", Toast.LENGTH_SHORT).show();  
}else {  
    Toast.makeText(Main3Activity.this, "没显示", Toast.LENGTH_SHORT).show();  
}

无卵用。

2、

if(inputMethodManager.isActive(editText)){  
    Toast.makeText(Main3Activity.this, "显示", Toast.LENGTH_SHORT).show();  
}else {  
    Toast.makeText(Main3Activity.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;  
      }  
  }



猜你喜欢

转载自blog.csdn.net/qq_28484355/article/details/78882269
今日推荐