android 键盘设置详解

news/2025/2/27 21:36:58/

相信大家在初涉android键盘的时候都有过困惑,无论是在manifest中设置android:windowSoftInputMode,还是通过mDialog.getWindow().setSoftInputMode();设置,都有那么多类型,该怎么选;他们都有什么样的特性呢?
下面就对这些类型以activity做出说明(我们分页面view是否被嵌套在scrollview中,分别给出特性):

  • adjustResize

activity会在键盘有变动的时候重新计算布局,调用activity的onSizeChanged方法。在进入该activity时,键盘会自动弹起。
在包裹着ScrollView的时候,能够保证焦点露出;同时将ScrollView的最低边缘重新计算至键盘上边缘位置;而里面的view可以正常上下滑动,能够完全展示。
在不包裹的时候,则不能够保证焦点正常露出;如果EditText过于偏下,则可能会被胡乱地推上来,而布局上边缘不发生变化,因此不一定能看到编辑区。

图片

  • adjustPan

activity不会在键盘变化的时候重新计算布局。键盘不会自动弹出。
无论是否包裹着ScrollView,都能够保证焦点正常露出;如果焦点偏下,会被正常推上来,但上部会被推出window上边界,且均不能上下滑动。

图片

  • adjustNothing

键盘不会自动弹出;弹出的键盘会直接覆盖activity,不管焦点是否能被看到。
图片

  • adjustUnspecified

键盘不会自动推上来;能够保证焦点正常露出;
在包裹着ScrollView时,可上下滑动;否则不能滑动;
图片

  • stateAlwaysVisible

always 强调了回来的动作:即从Activity A到B,再回到A的时候的键盘状态。
该状态下,从B回到A时的键盘状态一定是弹起状态,无论A到B的时候A的键盘是什么状态。
(只关心返回状态)

图片

  • stateAlwaysHidden

跟stateAlwaysVisible相反,从B到A的键盘状态一定是关闭的,无论A到B的时候A的键盘是什么状态(只关心返回状态)

  • stateVisible

在进入Activity的时候,键盘自动弹出,返回时保持键盘当前状态不变(只关心进入状态)
图片

  • stateHidden

在进入Activity的时候,键盘自动收起,返回时包吃键盘当前状态不变(只关心进入状态)
图片

  • stateUnchanged

在进入Activity的时候,键盘状态保持当前状态不变

图片

  • stateUnspecified

未知,还没有弄清楚,在目的明确的情况下,不建议使用。

以上介绍的特性,都是在单独使用某一状态的时候所展现出来的。但是,我们注意到,上述类型可分为两类,即以adjustXXX开头的和以stateXXX开头的。
这两类标志其实是两个维度的设置,一个从布局维度,另一个从状态维度。因此往往可以进行组合使用;具体情况应根据设计要求来。

下面介绍键盘显示还是隐藏的显示地控制方法。
一般我们在activity中会这样使用

    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);imm.toggleSoftInput(int showFlags, int hideFlags);

但是令人困惑的是,Flags有真么多,每一种都是什么含义呢?该怎么使用呢?下面就一一介绍每一种Flag的使用方法和含义。

  • HIDE_IMPLICIT_ONLY

    表示键盘除了在用户显示地调用,其余情况都应该是隐藏的。用于hideSoftInputFromWindow(IBinder, int)方法.

  • HIDE_NOT_ALWAYS

    表示键盘除了开始的时候被使用SHOW_FORCED 调用,正常情况下都应该是隐藏的。用于hideSoftInputFromWindow(IBinder, int)方法

  • RESULT_HIDDEN

    用于 showSoftInput(View, int, ResultReceiver) 和 hideSoftInputFromWindow(IBinder, int, ResultReceiver),即,有广播接收器的方法。
    广播接收到RESULT_HIDDEN,意味着键盘从显示到隐藏

  • RESULT_SHOWN

    广播接收器收到,意味着键盘从隐藏到展示

  • RESULT_UNCHANGED_HIDDEN

    广播接收器收到,意味着键盘状态没变,且为隐藏

  • RESULT_UNCHANGED_SHOWN

    广播接收器收到,意味着键盘状态没变,且为显示

  • SHOW_FORCED

    表示该键盘被人为吊起,用于方法showSoftInput(View view, int flag),应该由人为隐藏。

  • SHOW_IMPLICIT

    表示该键盘被自动吊起,不是被用户手动吊起。用于方法showSoftInput(View view, int flag)

上述状态,说白了是在键盘吊起的时候为其吊起的原因加上类别的,而这个类别不会影响到键盘是否弹起,而只会影响键盘是否会收回。比如,当键盘以SHOW_FORCE状态吊起时,如果设置了以HIDE_NOT_ALWAYS的收回策略,就不会被真正收回。因为,文档中显示,使用HIDE_NOT_ALWAYS一般情况下都会成功隐藏,只有在遇到以SHOW_FORCED吊起的键盘时无效。

因此,在显示地控制键盘吊起和关闭的时候,应进行以下调用:

imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,InputMethodManager.HIDE_NOT_ALWAYS);

当键盘关闭的时候调用该方法,表明我以SHOW_IMPLICIT的状态打开键盘,且应该以HIDE_NOT_ALWAYS的状态关闭。

当键盘经过上述过程开启时,再次调用该方法,表明我要以HIDE_NOT_ALWAYS的方式关闭该键盘,而这个键盘接受这样的关闭方式,因此可以正常关闭。

参考资料 Android手动显示和隐藏软键盘方法总结


http://www.ppmy.cn/news/697783.html

相关文章

iOS UITextField设置数字键盘

纯数字键盘: textField.keyboardType UIKeyboardTypeNumberPad; 纯数字加小数点键盘: textField.keyboardType UIKeyboardTypeDecimalPad

Android手动显示软键盘以及软键盘设置发送按钮的注意事项

最近更改项目中的输入框样式,涉及到软键盘的显示和隐藏问题,总结了几点注意事项,希望能帮到遇到同样问题的小伙伴。博文中除了显示软键盘的注意问题以外,还有一个发送按钮是否需要显示在软键盘上的问题 一、先说一下显示软键盘 …

Mac使用技巧:轻松自定义设置系统键盘

为你带来Mac OS系统和windows系统如何键盘自定义设置教程,感兴趣可以看看哦! 一.mac系统下如何将外接键盘设置成和苹果键盘一样 首先打开mac系统设置里的【键盘】。 点击【修饰键】。 选择【usb键盘】,然后 option 和 command对换。 二.win…

黑苹果系统--键盘设置(保持windows输入习惯)

1. 如图所示: 2. 设置鼠标方向:取消如下勾选 3. 禁止黑苹果系统自动更新,并且忽略更新提示 #隐藏/关闭Catalina更新 sudo softwareupdate --ignore "macOS Catalina"#隐藏/关闭Mojave更新 sudo softwareupdate --ignore "macO…

Mac mini 使用普通键盘设置 Windows 的粘贴、复制、剪切习惯

问题描述 通常我们会习惯性用左手小拇指按最左下角的 ctrl 键作为功能前缀键,进行复制、粘贴、剪切等操作,但将普通键盘接到 macOS 设备上,会将 windows 徽标键视为 command 键,此时习惯了 Windows 系统的朋友进行复制、粘贴、剪…

关于:将日文键盘设置为英文键盘

1、故障现象: 客户在一台 Windows 10 日文操作系统初始安装过程中,不小心设置为日文 106 键盘,而实际使用的是英文 101 键盘。 2、故障处理: 1)修改注册表键值: HKEY_LOCAL_MACHINE\SYSTEM\CurrentCont…

ElasticSearch - 根据经纬度,简单搜索指定距离范围内的数据

ES的地图检索方式 ES支持的地图检索方式有以下几种; geo_distance geo_bounding_box geo_polygon 1、geo_distance:直线距离检索,如给定点A,要求返回地图上距离点A三千米的商家(点外卖场景) 2、查找索引…

Unity VR 开发教程 OpenXR+XR Interaction Toolkit(八)手指触控 Poke Interaction

文章目录 📕教程说明📕XR Poke Interactor📕与 UI 进行触控交互⭐添加 Tracked Device Graphic Raycaster 和 XR UI Input Module 让 UI 可被交互 📕与物体进行交互⭐XR Simple Interactable⭐XR Poke Filter 往期回顾&#xff1a…