模仿微信聊天软键盘

模仿微信聊天软键盘处理

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值