天天看点

模仿微信聊天软键盘模仿微信聊天软键盘处理

模仿微信聊天软键盘处理

微信中有一个体验不错的功能,在聊天界面他的表情选择时弹出的高度与软键盘的高度是同样高的,切换的时候就不会给人一种一跳一跳的感觉,下面说一下如何做吧。下面介绍一步一步的处理方法:

1.首先,Android系统未直接提供方法监听软键盘打开与关闭的事件,也未提供获取软键盘高度的方法。所以这里需要一个取巧的方法,监听布局变化。那么如何做到呢?代码如下

private void initSoftHeight() {                       
listView.getViewTreeObserver()
    .addOnGlobalLayoutListener(
       new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect rect = new Rect();
                    contentView.getWindowVisibleDisplayFrame(rect);
                    softHeight = contentView.getRootView().getHeight() - rect.bottom;
                    if (softHeight > ) {                       
                        listView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    }
                }
     });
}
           

获取到softHeight即软键盘高度(获取到软键盘高度之后删除对布局变化的监听,节省资源)。

2.设置底部布局高度使其等于软件盘高度,这样就不会有一跳一跳的感觉了,代码如下:

3.设置输入框点击事件,在弹出软键盘之前先修改软键盘弹出方式为SOFT_INPUT_ADJUST_PAN,这里设置弹出软键盘的方式x 需要动态的修改,在关闭软件盘之前需要设置弹出方式为adjustPan。下面是监听输入框点击事件代码:

if (event.getAction() == MotionEvent.ACTION_DOWN) {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 
        bottom.setVisibility(View.VISIBLE);
        handle.postDelayed(new Runnable() {
         @Override
         public void run() {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 
            bottom.setVisibility(View.GONE);
        }
       }, );
       imm.showSoftInput(contentView,InputMethodManager.SHOW_FORCED); 
       contentView.requestFocus();
       return true;
    }
    return false;
           

这里只写了大概的思路供大家参考,有错误的地方就对不住了。