Android计算软键盘的高度-常用于自定义表情键盘高度设置

该博客介绍了一个方法,通过监听窗口全局布局变化来动态获取和设置输入框的高度,以便在弹出软键盘时适应屏幕空间。主要步骤包括:设置全局布局监听器以计算软键盘高度,重置视图的宽高,以及在`onCreate`中注册监听器。此外,还提供了在Dialog中显示和隐藏软键盘的辅助方法。
​
第一步:

private int mWindowHeight = 0;

private ViewTreeObserver.OnGlobalLayoutListener mGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {

    private int softKeyboardHeight;

    @Override
    public void onGlobalLayout() {
        Rect r = new Rect();
        //获取当前窗口实际的可见区域
        getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
        int height = r.height();
        int width = r.width();
        if (mWindowHeight == 0) {
            //一般情况下,这是原始的窗口高度
            mWindowHeight = height;
            setViewLayoutParams(evEmoji, width, 835);
        } else {
            if (mWindowHeight != height) {
                //两次窗口高度相减,就是软键盘高度  835
                softKeyboardHeight = mWindowHeight - height;
                setViewLayoutParams(evEmoji, width, softKeyboardHeight);
            }

        }

    }
};


第二步:

 /**
   * 重设 view 的宽高
   *
   * @param view  将View设置为和软键盘一样的高度
   * @param nWidth
   * @param nHeight
   */
public static void setViewLayoutParams(View view, int nWidth, int nHeight) {
   ViewGroup.LayoutParams lp = view.getLayoutParams();
    if (lp.height != nHeight || lp.width != nWidth) {
       lp.width = nWidth;
       lp.height = nHeight;
       view.setLayoutParams(lp);
    }
}


第三步:

在onCreate方法中调用

getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(mGlobalLayoutListener);

  

1、比如把输入框封装在dialog中,此时需要手动控制键盘的显示与隐藏的方法:

/**
  * 因为这个软键盘是在Dialog中打开的,所以也只能在Dialog中关掉
  */
 private void hideKeyBoard() {
     ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).
           hideSoftInputFromWindow(etCommentContent.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
 }

 /**
   * 因为这个软键盘是在Dialog中打开的,所以也只能在Dialog中关掉
   */
private void showKeyBoard() {
     InputMethodManager inputMethodManager = (InputMethodManager) etCommentContent.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        inputMethodManager.showSoftInput(etCommentContent, 0);
}

​

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值