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

自定义布局监听软件盘弹出关闭

2017-01-04 23:10 429 查看
在我的项目有个监听软键盘的需求 我找了好多东西 都没有合适 都监听的不怎么样  虽然 没有找到最好的方法 但是找到一个取巧的方法那就是自定义布局监听布局发生的改变来达到监听的目的代码如下
public class MyRelativeLayout extends RelativeLayout {
private InputWindowListener listener;

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

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

public MyRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
//主要是这个方法  布局的size发生改变
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
Log.i("MyRelativeLayout", "onSizeChanged: "+oldh+"========"+h);
if (oldh > h) {
Log.i("fff","input window show");
if (listener!=null){
listener.show();
}
} else{
Log.i("fff","input window hidden");
if (listener!=null){
listener.hidden();
}

}
}
//写个接口 来抛出显示和影藏的方法

public void setListener(InputWindowListener listener) {
this.listener= listener;
}

public interface InputWindowListener {
void show();

void hidden();
}
}
这里提醒一下  这个如果 你直接就写一个editview测试 会发现只会第一次 出发
onSizeChanged下面 不触发了  那是因为布局没有发生改变
解决方式就是让软件盘把布局顶上去 那么 布局大小必然发生改变
所以在清单文件 对对应的activity加上这个属性就Okl
android:windowSoftInputMode="stateVisible|adjustResize"
希望对你们有所帮助
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息