模仿微信聊天软键盘处理
微信中有一个体验不错的功能,在聊天界面他的表情选择时弹出的高度与软键盘的高度是同样高的,切换的时候就不会给人一种一跳一跳的感觉,下面说一下如何做吧。下面介绍一步一步的处理方法:
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;
这里只写了大概的思路供大家参考,有错误的地方就对不住了。