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

怎么监听Android软键盘的打开和关闭

2015-09-22 15:51 441 查看
这个昨天写了蛮近,太费劲了,目前还没有我觉得比较好的方式去解决。

也查阅了很多朋友的资料和博客,却一直没有完成我需要的效果。

最后无奈使用了下面这个方法:

public class InputStateLinearLayout  extends LinearLayout{
private OnSizeChangedListener listener;

public InputStateLinearLayout(Context context) {
super(context);
}

public InputStateLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}

public InputStateLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (listener != null) {
listener.onSizeChanged(w, h, oldw, oldh);
}
}

public void setOnSizeChangedListener(OnSizeChangedListener listener) {
this.listener = listener;
}

/** * Activity主窗口大小改变时的回调接口(本示例中,等价于软键盘显示隐藏时的回调接口) */
public interface OnSizeChangedListener {
public void onSizeChanged(int w, int h, int oldw, int oldh);
}
}


以上代码不多说,继续上代码:

mRoot.setOnSizeChangedListener(new InputStateLinearLayout.OnSizeChangedListener() {
@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
if (h>oldh){//关闭
//你自己需要处理的逻辑
}
}
});


mRoot其实就是这个界面的根布局。自己测试得出,h>oldh是关闭,反之打开。

以上暂时完成了我的需求。

然后当时我还用到了,监听

ViewTreeObserver

虽然也是可以的,但是总归没有达到我的需求。

转载请注明出处!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: