EditText隐藏软键盘的方法

法一:

在Manifest.xml文件中的Activity标签中加入

 android:windowSoftInputMode="adjustPan|stateHidden" 

adjustPan:目的是为了避免软键盘弹出时,将控件往上顶,导致界面变形,

stateHidden的目的就是为了切换到此Activity时,隐藏软键盘

法二:

在代码中设置:

在onCreate()方法里setContentView之前写上这个代码加上:

getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
法三:
在XML文件中 EditText的上一级布局中(或其他控件中)加入属性:
android:focusable="true"
 android:focusableInTouchMode="true"即可
法四:
把顶级的layout替换成ScrollView,或者说在顶级的Layout上面再加一层ScrollView。这样就会把软键盘和输入框一起滚动了,软键盘会一直处于底部

/****************************************************************防止挡住View***********************************************************************/

 
 

The AndroidManifest.xml File

 <activity android:windowSoftInputMode=["stateUnspecified",

                                    "stateUnchanged", "stateHidden",

                                    "stateAlwaysHidden", "stateVisible",

                                    "stateAlwaysVisible", "adjustUnspecified",

                                    "adjustResize", "adjustPan"] …… >

</activity>

attributes:

android:windowSoftInputMode

活动的主窗口如何与包含屏幕上的软键盘窗口交互。这个属性的设置将会影响两件事情:

1>     软键盘的状态——是否它是隐藏或显示——当活动(Activity)成为用户关注的焦点。

2>     活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的。

它的设置必须是下面列表中的一个值,或一个”state…”值加一个”adjust…”值的组合。在任一组设置多个值——多个”state…”values,例如&mdash有未定义的结果。各个值之间用|分开。例如: <activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >

在这设置的值("stateUnspecified""adjustUnspecified"以外)将覆盖在主题中设置的值

描述

"stateUnspecified"

软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。

这个是为了软件盘行为默认的设置。

"stateUnchanged"

软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

"stateHidden"

当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity

"stateAlwaysHidden"

软键盘总是被隐藏的,当该Activity主窗口获取焦点时。

"stateVisible"

软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)

"stateAlwaysVisible"

当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity

"adjustUnspecified"

它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。

"adjustResize"

Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间

"adjustPan"

Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

///
Android PopupWindow消失后,editText软件盘隐藏

,需要将搜索框作为一个弹出框显示,如图

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

此时,手指触摸输入框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关闭后,软键盘也会自动消失了,解决办法就是这么简单,却耗费了好长时间去查找...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值