模仿微信聊天软键盘

来源:互联网 发布:360拍照软件下载 编辑:程序博客网 时间:2024/06/06 18:03

模仿微信聊天软键盘处理

微信中有一个体验不错的功能,在聊天界面他的表情选择时弹出的高度与软键盘的高度是同样高的,切换的时候就不会给人一种一跳一跳的感觉,下面说一下如何做吧。下面介绍一步一步的处理方法:
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 > 100) {                                               listView.getViewTreeObserver().removeGlobalOnLayoutListener(this);                    }                }     });}

获取到softHeight即软键盘高度(获取到软键盘高度之后删除对布局变化的监听,节省资源)。
2.设置底部布局高度使其等于软件盘高度,这样就不会有一跳一跳的感觉了,代码如下:

bottom.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, softHeight));

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);        }       }, 300);       imm.showSoftInput(contentView,InputMethodManager.SHOW_FORCED);        contentView.requestFocus();       return true;    }    return false;

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

0 0