赞
踩
本文参照 Android 软键盘的显示和隐藏,这样操作就对了进行整理修正
Android软键盘系列:
我们使用InputMethodManager来实现Android中显示和隐藏软键盘的工作,几句代码就可以完成显示和隐藏键盘的操作,比较简单。
个人认为有两个点需要大家先留意一下:
先上代码
public static void showKeyboard(View view) {
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
view.requestFocus();
imm.showSoftInput(view, 0);
}
}
调用InputMethodManager的showSoftInput()可以实现显示键盘,先来看看它的两个参数。
View: 使用软键盘就是为了输入,而输入就需要有接收输入内容的 View ,这里接收输入的 View ,最好是一个 EditText(但这不是必须的)。
flags: flags 就是个标志位,从上面截图的方法签名上的文档上可以看到,它接收 0 或者 SHOW_INPYT_IMPLICIT 两个参数,但是实际上,它有第三个参数,另外一个是 SHOW_FORCED。
以下是需要注意的使showSoftInput生效的关键点:
打开Activity时默认下打开或关闭软键盘,可以通过设置清单文件实现
<activity
android:name=".ActivityKeyboardActivity"
android:windowSoftInputMode="stateVisible"
/>
stateVisible:打开。
stateHidden:关闭(默认)。
先上代码
public static void hideKeyboard(View view){
InputMethodManager imm = (InputMethodManager) view.getContext()
.getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(),0);
}
}
同样来看看hideSoftInputFromWindow的两个参数。
IBinder: 可以直接传递一个 View.getWindowToken() 的 windowToken 对象就可以了
flags: 隐藏软键盘的标志位,如果没有特殊要求的话,直接传递 0 就好了。
注意: 第一参数理论上需要传递弹出键盘相应的View的windowToken ,但实际情况是你只需要传递一个存在于当前布局 ViewTree 中,随意一个 View 的 windowToken 就可以了
如上图所示,键盘是由第一个Edittext聚焦后弹出的,当点击Hide Keyboard按钮调用hideSoftInputFromWindow方法时,第一个参数传的是第二个Edittext的windowToken ,但也能把键盘隐藏掉。
在 InputMethodManager 中,还提供了一个 toggleSoftInput() 方法,如同它的名字一样,它可以让软键盘在显示和隐藏之间切换。
虽然这个方法,限制很少,但是我们基本上不会使用它。主要原因在于,它是一个开关的方法,会根据当前的状态做相反的操作。这就导致很多时候,我们在代码中,无法直接根据 InputMethodManager 提供的方法判断当前软键盘的显示状态,这样也就无法确定调用它的时候的效果了。
InputMethodManager 没有提供判断键盘是否弹出的调用方法,如果想要监听键盘的弹出和收起,可以使用 ViewTreeObserver.OnGlobalLayoutListener 这个监听,来监听布局的调整,从而判断出键盘的弹出和隐藏。
这一点我在Android软键盘-弹起时布局向上拉-登录界面时有提及,有兴趣的可以去看看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。