Android 输入法键盘使用

  • 一.设置页面输入法展示方式
    • 1.adjustXxx
    • 2.stateXxx
    • 3.代码调用
  • 二.动态调用键盘
    • 1.调起键盘
    • 2.隐藏键盘

一.设置页面输入法展示方式

我们经常会在项目中遇到输入法展示的情况,有时希望进入页面时自动展示输入法,有时希望页面不展示输入法直到用户主动点击EditText之类的,还有输入法和相关View出现的位置等等,都是通过manifest里对activity的windowSoftInputMode属性设置或者代码直接设置实现的,manifest的配置如下

<activity android:name="com.widget.Main4Activity"android:windowSoftInputMode="adjustPan|stateVisible"/>

activity的windowSoftInputMode属性由两种属性组成:

  • adjustXxx:设置输入法键盘出现时View的位置变化,因为通常我们希望输入法出现时可以聚焦到相应的View处

  • stateXxx:设置输入法出现的方式,比如进入页面出现,或进入页面不出现等

这里我们主要来学习有哪些属性已经他们的作用

1.adjustXxx

  1. adjustPan:

    键盘弹出时,向上移动整个View(类似于改变根View的top),直到焦点View移动至键盘上方

    可滑动View使用该属性,会导致View整体上移(top变化),有些View无法被滚动到,该属性通常给不可滑动View使用

  2. adjustResize:

    键盘弹出时,将整个View重新布局,height=screenHeight-键盘height,且可滑动View的话,将会滚动到焦点View

    整体View重新布局后,对于可滑动View来说,仍然可以滚动展示全部内容,该属性通常给可滑动View使用;对于不可滑动的View如果使用该属性,可能会导致焦点View在新的height以下,而无法展示(因为不可滑动至该View)

  3. adjustUnspecified:

    系统默认行为,结合上面两种情况,可滑动View时使用adjustResize,不可滑动View时使用adjustPan

  4. adjustNothing:

    正常展示键盘,不考虑内容是否被遮挡

我们通常情况下,使用adjustUnspecified方式即可,可以使用各种View的处理方式

2.stateXxx

  1. stateVisible:

    创建(需要焦点View获取到焦点)或Home键进入页面时展示键盘,回退进入页面时不改变当前键盘状态(如果上一个页面关闭时键盘是打开的,则仍然打开;如果是关闭的则仍然关闭)

  2. stateAlwaysVisible:

    创建(需要焦点View获取到焦点)或Home键进入页面、以及回退到页面时均展示键盘

  3. stateHidden:

    创建或Home键进入页面时隐藏键盘,回退进入页面时不改变当前键盘状态(如果上一个页面关闭时键盘是打开的,则仍然打开;如果是关闭的则仍然关闭)

  4. stateAlwaysHidden:

    创建或Home键进入页面、以及回退到页面时均隐藏键盘

  5. stateUnchanged:

    不改变进入页面前的键盘状态

  6. stateUnspecified:

    系统会根据情况默认展示或隐藏键盘

常用场景:

  • 需要第一次进入页面展示键盘时,我们使用stateVisible并让焦点View获取焦点

  • 需要第一次进入页面不展示键盘时,我们可以不让焦点View获取焦点,或者使用stateHidden

  • 每次进入页面都展示/隐藏键盘,则使用stateAlwaysVisible/Hidden

3.代码调用

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

二.动态调用键盘

我们有时需要手动调起键盘或者隐藏键盘,系统提供了一些方式

1.调起键盘

val im = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
im?.showSoftInput(focusedView, InputMethodManager.SHOW_IMPLICIT)

第一个参数是焦点View,比如要进行输入的EditText;这里主要看下第二个参数,用来指定打开方式

  1. 0:

    任何情况下打开键盘

  2. SHOW_IMPLICIT:

    隐式方式打开键盘,是系统自动弹出的方式,用户手动点击焦点View而导致弹出键盘,则不属于这种方式

  3. SHOW_FORCED:

    强制方式打开键盘,打开后只能手动关闭,或使用参数0调用hideSoftInput关闭(见下)

通常情况下,我们使用0打开键盘即可,可以保证一定能正常打开键盘

2.隐藏键盘

val im = getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager
im?.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_IMPLICIT_ONLY)

第一个参数是window的token,从view获取即可;这里主要看下第二个参数,用来指定隐藏方式

  1. 0:

    任何情况下隐藏键盘,可以隐藏各种方式打开的键盘

  2. HIDE_IMPLICIT_ONLY:

    只有通过IMPLICIT方式打开的键盘,才可以关闭

  3. HIDE_NOT_ALWAYS:

    只有FORCED模式打开的键盘不能关闭,其他模式打开的都可以关闭(包括用0打开的)

通常情况下,我们使用0隐藏键盘即可,可以保证一定能关闭键盘。

Android 输入法键盘使用相关推荐

  1. Android 输入法键盘和activity页面遮挡问题解决

    本文主要介绍Android中如何解决输入法键盘和activity页面遮挡的问题. 总结: 不希望遮挡设置activity属性android:windowSoftInputMode="adju ...

  2. android 输入法键盘弹出与否判断和输入法键盘弹出时将界面滚动到指定位置

    本文章重点谈下如何实现,结合以下demo,来谈谈输入法键盘弹出与否判断和输入法键盘弹出时将界面滚动到指定位置 1.先看下demo的场景,这是个登录界面,因为界面元素比较多,导致在输入法弹出时,下面的登 ...

  3. Android 输入法键盘的显示和隐藏

    import android.app.Activity; import android.content.Context; import android.view.View; import androi ...

  4. Android 输入法键盘和自定义表情面板

    序 .项目有一版本是在优化了直播的聊天功能 ,需要自定义表情面板 .emmmm . 效果图 功能点 : 点击左边的笑脸会弹出表情面板 ,点击输入框会切换到键盘 . 直接上代码 package com. ...

  5. Android 输入法键盘的隐藏和显示

     1.方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示) InputMethodManager imm = (InputMethodManager) getSystemService(Con ...

  6. android输入法键盘下载安装,键多多输入法下载安装

    键多多输入法app使用起来简单方便,让你可以更高效的打字,还有各种有趣的表情包.emoji表情让你聊天更有趣,软件使用起来简单方便,感兴趣的用户赶快来下载体验吧! 键多多输入法软件介绍 "键 ...

  7. Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果)(转)

    原文地址 点我传送 在个别时候,需要强制隐藏Android输入法键盘,如当前键盘正在显示,这个时候点击了侧滑面板,就要强制隐藏输入法键盘.网上常见的方法有: 1. InputMethodManager ...

  8. Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果)

    在个别时候,需要强制隐藏Android输入法键盘,如当前键盘正在显示,这个时候点击了侧滑面板,就要强制隐藏输入法键盘.网上常见的方法有: 1. InputMethodManager imm = (In ...

  9. Android中如何解决输入法键盘和activity页面遮挡的问题

    Android中如何解决输入法键盘和activity页面遮挡的问题 参考文章: (1)Android中如何解决输入法键盘和activity页面遮挡的问题 (2)https://www.cnblogs. ...

最新文章

  1. 命令行下执行带参数php
  2. 使用淘宝的IP查询API实现IP地址省市展示
  3. 初探设计:Java继承何时用?怎么用?
  4. c#_List<T>(IEnumerable<T>)
  5. linux终端窗口玩法
  6. 实例Python处理XML文件的方法
  7. HD_1166敌兵布阵
  8. html5新变化,HTML5的新变化,分享
  9. 蓝桥杯基础模块8_2:串口进阶
  10. springboot源码解析autoconfigure之AopAutoConfiguration
  11. app毕业设计 基于uni-app框架的电影院订票选座app毕设题目课题选题作品(2)后台管理功能
  12. 电工学习笔记————稳压二极管伏安特性
  13. 如何设置好看的form表单样式_HTML表格表单
  14. UCOS操作系统——消息传递(十二)
  15. 爬虫高级应用(15. 基于Charles抓包软件抓取手机APP数据)
  16. 华为手机解析出现问题
  17. 干货 | 什么是ABCDE轮融资?
  18. 拯救者15isk加装固态硬盘
  19. CF831A-Unimodal Array(单峰阵列)
  20. sql语句-按照汉字拼音首字母排序

热门文章

  1. 学习 Python 之 Pygame 开发坦克大战(五)
  2. Ubuntu 20.04LTS 安装openni2、编译opencv、连接Kinect v2
  3. API卡_物联网卡为何更适用于儿童电话手表
  4. Vertx入门学习(含代码)
  5. 【算法设计技巧】贪婪算法与回溯算法
  6. 怎么查询京东白条还款记录
  7. MYSQL中limit以及oder by混用产生的一些错误
  8. 算法训练——字符串映射
  9. 1000元服务器搭网站,1000元搭建八核十六线程工作站
  10. 【教程】LaTeX 设置字体(不仅仅是字体大小,而且还有多种字体,比如 Comic Sans MS!!! fairly cool!)