300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > android隐藏软键盘方法 Android使用InputMethodManager显示和隐藏软键盘

android隐藏软键盘方法 Android使用InputMethodManager显示和隐藏软键盘

时间:2022-02-16 20:30:54

相关推荐

android隐藏软键盘方法 Android使用InputMethodManager显示和隐藏软键盘

Android主要用InputMethodManager来对软键盘进行管理。手动显示或隐藏软键盘前需要先获取InputMethodManager。

InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

if(imm!=null){

//...

}

为了避免NullPointException,需要判断imm实例是否为null。

显示软键盘

InputMethodManager显示软键盘有三个方法:

booleanshowSoftInput(Viewview,intflags)

booleanshowSoftInput(Viewview,intflags,ResultReceiverresultReceiver)

voidshowSoftInputFromInputMethod(IBindertoken,intflags)

一般情况下会选择使用第一个方法,即两个参数的showSoftInput,基于两个原因:

showSolftInput的resultReceiver参数用于接收完成输入后返回结果,但由于它可以长时间存在jvm里而不会被gc,使用它需要注意内存泄漏。

showSoftInputFromInputMethod使用不当会存在失效的情况。

所有这里只介绍showSoftInput (View view, int flags)

先上示例

showKeyBoard(Viewview){

InputMethodManagerimm=(InputMethodManager)veiw.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

if(imm!=null){

view.requestFocus();

imm.showSoftInput(view,0);

}

}

showSoftInput的第一个参数view需要满足以下条件:

必须是可获取焦点,即view.isFocusable()为true。这里最好的是EditText 或其子类,它默认是可获取焦点的。

必须以获取焦点,即view.isFocused()为true。为了避免失焦(布局里可能存在多个可获取焦点的控件),可以先使用requestFocus()获得焦点后再调用showSoftInput(),如示例所示。

当前布局必须加载完成,所以在onCreate调用showSoftInput是会失效。

为了在布局加载完成后再调用showSoftInput,可以使用postDelayed来延迟执行showSoftInput()

getWindow().getDecorView().postDelayed(newRunnable(){

@Override

publicvoidrun(){

showKeyBoard(view);//前面例子的方法

}

},100);

showSoftInput第二个参数为flags,它是提供额外操作的标记。目前可以为两个值0和 SHOW_IMPLICIT。SHOW_IMPLICIT表示不是由用户操作引起显示软键盘的,为隐含显示。一般可以使用0。

隐藏软键盘

Android没有与showSoftInput对应的类似hideSoftInput的方法,我们可以使用hideSoftInputFromWindow隐藏软键盘。

方法原型:

booleanhideSoftInputFromWindow(IBinderwindowToken,intflags)

windowToken:第一个参数可以使用View.getWindowToken()或者getWindow().getDecorView().getWindowToken()

flags:隐藏软键盘的标志位,可以传0

关闭软键盘,windowToken不需要已获取焦点的View,所以可以使用getWindow().getDecorView().getWindowToken()获取一个windowToken用于关闭软键盘。

示例

InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

if(imm!=null){

imm.hideSoftInputFromWindow(getWindow().getDecorView().getWindowToken(),0);

}

注意:如果是使用view.getWindowToken(),此view需要被添加到布局里才行,否则不能关闭软键盘。

切换软键盘

InputMehtodManager还提供了toggleSoftInput方法用于切换软键盘显示和隐藏。它不需要向它出入view或windowToken。

方法原型:

voidtoggleSoftInput(intshowFlags,inthideFlags)

showFlags:显示使用的标记,和showSoftInput的第二个参数flags一样。

hideFlags:隐藏使用的标记,和hideSoftInputFromWindow第二个参数一样。

示例:

InputMethodManagerimm=(InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE);

if(imm.isActive()){

imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY,0);//隐藏

}else{

imm.toggleSoftInput(0,InputMethodManager.HIDE_IMPLICIT_ONLY);//显示

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。