android PopupWindow消失后,将EditText的软键盘隐藏

在Android开发中,遇到PopupWindow与软键盘交互的问题。当PopupWindow包含EditText时,触摸其他区域弹窗消失,但软键盘不隐藏。解决方法是在AndroidManifest.xml中设置Activity的windowSoftInputMode为'adjustPan',同时在PopupWindow关闭时,尝试通过InputMethodManager隐藏软键盘。然而,发现mServedView为null导致无效。最后发现去掉'stateHidden'属性,仅保留'adjustPan',软键盘在PopupWindow关闭后能自动消失。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做项目,涉及到软键盘的隐藏问题.由于条件比较特殊,因此记录解决方法

1.刚开始,需要在主界面上增加一个EditText控件,作为搜索框,如图



但是,如果此控件在主界面上,则会出现EditText自动获取焦点,并自动出现软键盘的问题

解决办法:在AndroidManifest.xml文件中,将此Activity的软键盘属性设置为 android:windowSoftInputMode="adjustPan|stateHidden" . adjustPan的目的是为了避免软键盘弹出时,将控件往上顶,导致界面变形,stateHidden的目的就是为了切换到此Activity时,隐藏软键盘


2.但是由于后期,界面修改,需要将搜索框作为一个弹出框显示,如图

   点击搜索按钮后弹出----> 

此时,手指触摸输入框EditText后,出现软键盘,但当触摸其他地方后,PopupWindow自动消失,但软键盘死活不消失,注:我的PopupWindow属性设置为:

//点击弹出框外面自动消失

popupWindow.setOutsideTouchable(true);

//自动获取焦点,否则EditText将无法获取焦点
popupWindow.setFocusable(true);


软键盘不能消失,即使使用了网上的很多方法也不行,如:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);

完全无效果,看了下InputMethodManager的源码,发现要隐藏软键盘,需要满足若干条件,首先就得有个关键的因素 mServedView,它不能为空,而且必须是和hideSoftInputFromWindow函数传入的token相等,才能起效.因此又加入了下面一段代码

popSearchWindow.setOnDismissListener(new OnDismissListener() {

@Override
public void onDismiss() {
// TODO Auto-generated method stub
ClearAutoCompleteTextView cv = getClearAutoCompleteTextView();

//设置EditText的输入类型,网上找的解决办法,其实无效果
cv.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);

//取消EditText的焦点,也无效果
cv.clearFocus();

//隐藏软键盘,还是无效果
hidSoftInput(cv);
}
});


public void hidSoftInput(View v) {
if ( v == null ) {
return;
}
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}

目的是设置PopupWindow被关闭时,主动找到我的搜索EditText控件,并进行隐藏,但调试后,发现InputMethodManager 中的mServedView居然是个null ... 那隐藏肯定是失败的,

最终的解决办法:AndroidManifest.xml文件中,将此Activity的软键盘属性设置为 android:windowSoftInputMode="adjustPan",因为修改的界面中,没有EditText控件,因此不会自动出现软键盘了, 去掉stateHidden属性后,一切变得正常,即使不主动去隐藏软键盘,当PopupWindow关闭后,软键盘也会自动消失了,解决办法就是这么简单,却耗费了好长时间去查找...



评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值