监听系统软键盘的显示与隐藏

通过监听界面大小变化来判断软键盘的弹出。本文介绍如何在EditText被点击时监听软键盘的显示,同时提及AndroidManifest.xml中activity的android:windowSoftInputMode设置可能对监听效果的影响。已测试stateHidden|adjustResize|adjustPan等模式。

监听系统软键盘的显示与隐藏

关于监听软键盘的显示与隐藏,本人在网上看到这样的方法:自定义view,并重写onSizeChanged()方法,在onSizeChanged(int w, int h,int oldw,int oldh) 方法里监

听界面大小的变化来判断软键盘的弹出问题。

但是如果不想多一个文件,又不想自定义view呢?

下面是本人的实现:

在我们的应用中弹出输入法的目的是想在EditText中输入内容,现在本人就通过EditText来实现监听软件盘的显示与隐藏:


 private boolean softInputIsHide = true;  //输入法是否在显示
 private int editPosY = -1; //记录edit在屏幕的初始的位置Y

   //下面2个监听用户监听输入法是否弹出
   edit.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int[] location = new int[2];
edit.getLocationOnScreen(location);
editPosY = location[1];//保存edit在屏幕的初始Y位置
//DebugUtils.printInfo(TAG, "addOnGlobalLayoutListener edit pos:[" + location[0] + "," + location[1] + "]");
edit.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
});
   
   edit.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
int[] location = new int[2];
edit.getLocationOnScreen(location);
//DebugUtils.printInfo(TAG, "addOnPreDrawListener dh=" + location[1]);
if(editPosY == location[1]){
softInputIsHide = true;
}else{
softInputIsHide = false;
}
return true;
}
});




在本方法中是用来监听当点击EditText时弹出软键盘的(对于页面跳转直接弹出软件盘未做测试),当然AndroidManifest.xml中activity的android:windowSoftInputMode的

部分情形可能对本方法有影响(未测试所有情形)。

注:stateHidden|adjustResize|adjustPan等测试过可行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值