Android软键盘是没有直接的监听事件的,网上说通过该SDK源码,重新编译可以实现直接的监听,但总感觉复杂,只是没办法中的办法。还有一种是通过监听onLayout函数来实现,但这个有局限性,只针对压缩布局,就是软键盘弹起后,屏幕布局上下压缩的形式,不过相对简单,特定情况下用着也很方便,所以上网搜了下,记下来。
总共两步: 一 复写布局
二 实现监听
一:复写布局,以LinearLayout为例。
package com.yy.my.utils;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
/**
* 重写布局,实现压缩模式下软键盘弹出隐藏的监听
*
* @author Administrator
*
* 2015.1.24
*/
public class ResizeLayout extends LinearLayout{
private OnResizeListener mListener;
public interface OnResizeListener{
void OnResize(int w, int h, int oldw, int oldh);
}
public void setOnResizeListener(OnResizeListener l){
mListener = l;
}
public ResizeLayout(Context context) {
super(context);
}
public ResizeLayout(Context context, AttributeSet attrs){
super(context, attrs);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (mListener != null){
mListener.OnResize(w, h, oldw, oldh);
}
}
}
二:activity里面实现监听。
//重写的LinearLayout布局
ResizeLayout mLayout = (ResizeLayout) findViewById(R.id.main_root_layout_id);
mLayout.setOnResizeListener(new OnResizeListener() { //对布局进行监听
@Override
public void OnResize(int w, int h, int oldw, int oldh) {
if (h < oldh){
//现在的高度小于原有高度,说明软键盘弹起,压缩了布局
}
if (h > oldh){
//现在的高度大于原有高度,说明软键盘隐藏了
}
}
});