您的位置:首页 > 移动开发 > Android开发

android键盘监听方案

2016-02-01 14:28 519 查看
     学习android从大三到工作已经差不多有两年了,虽然不能和大神相提评论但现在也算积累了很多的经验,现在想想也应该写一些东西记录一下了。

     今天讲一些键盘监听,为啥想说这个呢?因为android并没有给我们最好的键盘监听的方案,也就是说键盘的打开和收起我们是没办法靠原生的API的只能考我们自己。

     其实对于键盘的监听也是很简单的一件事情,有一点经验的人都知道,android的键盘在出现和消失的时候都会调用外层布局的onLayout方法去重新布局, 我们只要通过复写父控件上的onLayout方法,和记一个状态变量就可以很简单的解决这个问题。  

    所有我们可以写一个KeyBoardRelativeLayout 继承 RelativeLayout 来封装事件的监听。要注意的是在activity初始化的时候也会走onLayout的方法所以要注意的是要要精第一次的清空剔除出去

    我们需要重写这个view中的onLayout方法 public static final byte KEYBOARD_STATE_SHOW = -3;
public static final byte KEYBOARD_STATE_HIDE = -2;
public static final byte KEYBOARD_STATE_INIT = -1;

private boolean mHasInit = false;
private boolean mHasKeyboard = false;
private int mHeight;

private OnKeyBoardChangeListener onKeyboardStateChangedListener;
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
if (!mHasInit) {
mHasInit = true;
mHeight = b;
if (onKeyboardStateChangedListener != null) {
onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_INIT);
}
} else {
//mHeight = mHeight < b ? b : mHeight;
}

if (mHasInit && mHeight > b) {
mHasKeyboard = true;
mHeight = b;
if (onKeyboardStateChangedListener != null) {
onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_SHOW);
}
}
if (mHasInit && mHasKeyboard && mHeight < b && Math.abs(mHeight - b) >= 200) {
mHasKeyboard = false;
mHeight = b;
if (onKeyboardStateChangedListener != null) {
onKeyboardStateChangedListener.onKeyboardStateChanged(KEYBOARD_STATE_HIDE);
}
}
}

public interface OnKeyBoardChangeListener {
public void onKeyboardStateChanged(int state);
}
      
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android