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

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

if (imm != null) {

//...

}

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

显示软键盘

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

boolean showSoftInput (View view, int flags)

boolean showSoftInput (View view, int flags, ResultReceiver resultReceiver)

void showSoftInputFromInputMethod (IBinder token, int flags)

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

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

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

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

先上示例

showKeyBoard(View view) {

InputMethodManager imm = (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(new Runnable() {

@Override

public void run() {

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

}

}, 100);

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

隐藏软键盘

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

方法原型:

boolean hideSoftInputFromWindow (IBinder windowToken, int flags)

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

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

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

示例

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

if (imm != null) {

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

}

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

切换软键盘

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

方法原型:

void toggleSoftInput (int showFlags, int hideFlags)

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

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

示例:

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

if (imm.isActive()) {

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

} else {

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

}

android隐藏软键盘方法,Android使用InputMethodManager显示和隐藏软键盘相关推荐

  1. android隐藏软键盘方法,Android显示和隐藏软键盘方法

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

  2. android颜色值的表示方法android:background=#FFFFFFFF的意思

    android颜色值的表示方法 android:background="#FFFFFFFF"的意思 Android中的颜色值是通过红(Red).绿(Green).蓝(Blue)三原 ...

  3. android上滑隐藏动画,ListView上滑和下滑,显示和隐藏Toolbar的实现方法

    1.准备Toolbar 先隐藏系统自带的actionbar,在AndroidManifest.xml文件标签中: android:theme="@style/Theme.AppCompat. ...

  4. android中的add方法,Android中Fragment怎么addView?

    慕勒3428872 Fragment是Android honeycomb 3.0新增的概念,在Android--Fragment介绍.AndroidFragment使用.Android Fragmen ...

  5. android的反调试方法,Android平台融合多特征的APP反调试方法与流程

    本发明涉及Android平台融合多特征的APP反调试方法,属于计算机与信息科学技术领域. 背景技术: 应用程序本身并不具备反调试的功能,但是动态调试是动态分析应用逻辑.动态脱壳等攻击方式所采取的必要手 ...

  6. android 开启子线程方法,android中开启子线程

    AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example/ ...

  7. android 矢量图片使用方法,Android中的矢量图

    概述 VectorDrawable是通过XML文件中的一系列点,线和曲线及其相关颜色信息定义的. 使用VectorDrawable的主要优点是图像可扩展性. 它可以缩放而不损耗显示质量,这意味着相同的 ...

  8. android 设置全屏方法,Android中设置全屏的方法

    在开发中,我们经常需要把我们的应用设置为全屏,这里有两种方式: 一是在代码中设置; 二是在配置文件中设置 一. 在代码中设置 public class BaseActivity extends Act ...

  9. Android解析xml的方法,Android中解析XML格式数据的方法

    XML介绍:Extensible Markup Language,即可扩展标记语言 一.概述 Android中解析XML格式数据大致有三种方法: SAX DOM PULL 二.详解 2.1 SAX S ...

最新文章

  1. 小程序 reduce_使用reduce制作的10个更多实用程序功能
  2. python opencv 灰度图非局部平均去噪
  3. QCon演讲速递:异步处理在分布式系统中的优化作用
  4. cmd命令重定向到剪切板
  5. some understandings about 《Learning representations by back-propagating errors》
  6. zabbix mysql复制延迟_mysql 主从复制延迟监控
  7. 把mysql某一列求和_Laravel 对某一列进行筛选然后求和sum()的例子
  8. ASP.NET Core分布式项目实战(详解oauth2授权码流程)--学习笔记
  9. Win32汇编——过程控制(环境变量、命令行参数、可执行文件执行)
  10. python 中读取yaml
  11. redis 备份与恢复
  12. Streamlit--python中的前端
  13. 三线表的制作(硕士毕业论文WORD中)
  14. 边境的悍匪—机器学习实战:第十章 Keras人工神经网络简介
  15. 【英语:基础高阶_全场景覆盖表达】K6.口语主题陈述——人物类
  16. vue计算本周是今年的第几周
  17. Keil5 点击Debug Setting 软件崩溃解决方法
  18. #{}和¥{}的区别?
  19. vue路由守卫有哪三种类型
  20. 向面前的第一座山进军!!!

热门文章

  1. 宁波大学计算机非全,宁波大学非全日制研究生管理办法(试行)
  2. BUUCTF·[NCTF2019]babyRSA·wp
  3. react获取url上面参数
  4. python中read() readline()以及readlines()区别
  5. oracle 物理dg 逻辑dg,物理DG与逻辑DG的区别与逻辑DG同步异常处理方法
  6. 【FinE】投资组合管理与策略(1)
  7. devDept Eyeshot Fem 2022.2 Crack
  8. 拉绳编码器选型要注意的问题
  9. 正则表达式符号含义解析带实例
  10. UE4 管理游戏的音量 开关