Android手动显示和隐藏软键盘方法总结

本文详细介绍了如何使用InputMethodManager在Android中手动显示和隐藏软键盘,包括showSoftInput()和hideSoftInputFromWindow()方法的使用注意事项,以及toggleSoftInput()在切换软键盘状态的应用。强调了参数设置对软键盘操作的影响,同时提供了部分源码解读。
摘要由CSDN通过智能技术生成

本文主要介绍Android中通过代码手动显示和隐藏软键盘方法。文章比较长,不想看原理的话可以直接看结论。

InputMethodManager类

Android中软键盘的管理主要是通过InputMethodManager类来完成的。
InputMethodManager对象的获取方法如下。

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

获取到InputMethodManager对象后就可以通过调用其成员方法来对软键盘进行操作。不过在使用InputMethodManager对象前通常都需要判断其是否为null,避免运行时异常。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
    ...
}

显示软键盘

Android中可以通过InputMethodManager的showSoftInput()方法来显示软键盘。
InputMethodManager的showSoftInput()方法原型为

public boolean showSoftInput(View view, int flags);

它有两个参数,第一个参数表示当前要接收软键盘输入的View,第二个参数是软键盘显示时的控制参数。
使用InputMethodManager的showSoftInput()方法来显示软键盘有如下注意事项。

  1. 第一个参数中view必须是EditText,或者EditText的子类,如果是其他类型的View,如Button,TextView等,showSoftInput()方法不起作用。
  2. 第一个参数中的view必须是可以获取焦点的(即view.isFocusable()返回true),如果不能获取焦点,则showSoftInput()方法不起作用。EditText默认是可获取焦点的,所以此条件一般都可以满足。如果不满足,可以通过view.setFocusable(true);将其设置为可获取焦点的View。
  3. 第一个参数中的view当前必须已经获取到焦点(即view.isFocused()返回true),如果当前焦点不在该view上,则showSoftInput()方法不起作用。虽然EditText默认是可获取焦点的,但由于一个布局中可能会有多个控件可以获取焦点,焦点位置不一定会恰好在EditText上,所以此条件不一定满足。为了让showSoftInput()可以起作用,必须在之前showSoftInput()前先通过view.requestFocus();获取焦点。然后再执行showSoftInput()。
  4. 第一个参数中的view必须是可见的,即view.getVisibility()等于View.VISIBLE,如果view是不可见的,无论view.getVisibility()是View.INVISIBLE还是View.GONE,showSoftInput()方法都不起作用。如果view是不可见的,可以先通过view.setVisibility(View.VISIBLE)将其设置为可见。
  5. 当前布局必须已经完成加载,如果还未绘制完成,则showSoftInput()方法不起作用。特别的,在Activity的onCreate()中执行showSoftInput()是不起作用的。如果要再布局文件加载后就显示软键盘,可以通过postDelayed的方式来延迟执行showSoftInput()。延迟时间不能太短,一般要在50ms以上。代码示例如下。

    getWindow().getDecorView().postDelayed(new Runnable() {
        @Override
        public void run() {
            InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
     
  • 46
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值