关于弹出和隐藏输入法

本文讲述了在Android应用中如何实现输入法的自动弹出和隐藏,主要利用InputMethodManager类。通过分析API和参考他人博客,总结出最佳实践。在布局无控件时如何弹出软键盘,以及在不同情况下选择合适的参数调用showSoftInput方法。同时强调了在调用弹出软键盘方法时需等待界面绘制完成的重要性。

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

关于弹出和隐藏输入法

最近做的手机遥控器APP,需要在机顶盒端弹出输入法时,在该APP内时,手机也能够弹出输入法,达到同步输入的效果,当然这个是如何实现的,是我师父修改了Android的framework层的InputMethodManager实现的,是用广播实现的,暂时还没有时间去看下他修改的源码,完成这个APP之后一定要去好好看一下,好了回归正题,输入法的弹出和隐藏,主要的就是借助Android提供的InputMethodManager类来实现的,在一开始的时候看了一下API各种尝试就是不能达到,输入法自动弹出,在关闭当前界面时,输入法自动关闭,满足了自动弹出,就满足不了自动隐藏,的确有些崩溃,再经历了自己的各种尝试之后我就上博客上来学习了,看到了ccpat这个博主写的一篇《android手动显示和隐藏输入法》结合API的对InputMethodManager类的一些参数和方法的解释,总算是给整明白了,还有,这位大神对这个解释的太清楚了,有兴趣的可以去看看,我的总结基本上也是照抄他的,哈哈哈哈。
这里是大神写的原文地址
我就直接捡结果说吧,首先InputMethodManager怎么使用

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

然后性价比最高的弹出软件键盘的方法如下。

public void showSoftInput() {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null) {
        // view就是你设置的EditText或者其他控件
        view.requestFocus();
        imm.showSoftInput(view, 0);
    }
}

如果你的布局中没有任何控件,还可以采用如下方式弹出软键盘

imm.toggleSoftInput(0, 0);

这个方法的原型是下面这样的
public void toggleSoftInput(int showFlags, int hideFlags);
就是软键盘是隐藏的时候弹出,是弹出的时候隐藏。
当然在API上是有好几个参数弹出软键盘的,但是也就是showSoftInput这个方法的第二个参数, 有SHOW_IMPLICIT, SHOW_FORCED,0,当然0绝对是最直接并且约束条件最少的一个标志。在我说的那篇博客中那位大神画了一个表格很清晰的展现了几种标志在显示和隐藏软键盘时差异,他写的的确是太好了,所以我写的基本只能照搬了。结合我在实际使用时遇到的坑吧,不过其实试错也是一个加深记忆的过程,所以大家如果能够自己先好好摸索是最好的,直接看博客的话,毕竟是别人咀嚼过的东西。
然后是隐藏软键盘的最佳方法:

//隐藏键盘方法原型
public boolean hideSoftInputFromWindow(IBinder windowToken, int flags);
public void showSoftInput() {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm != null) {
        // view就是你设置的EditText或者其他控件
        view.hideSoftInputFromWindow(view.getWindowToken(),0);
    }
}

  最后在所有使用弹出软键盘的方法的时候一定要等待界面绘制完成,在所有使用弹出软键盘的方法的时候一定要等待界面绘制完成,反正我就是被这个给坑惨了,说到底还是源码看的少了,具体办法可以在前文创建软键盘的方法放在一个延时器中执行,延时个50ms应该足够了。
第二篇博客,第一次用MarkDown写博客,感觉挺爽的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值