如何获取android的软键盘的显示状态

如何获取android的软键盘的显示状态,第1张

最近项目中有一个编辑框,下面是个ListView。在触发编辑框d出软键盘后,ListView还能滑动,并且ListView的item还能响应单击。这样的体验效果很不好。于是便想在滑动或单击item时判断键盘是否d出,若d出,则把它隐藏。

网上一搜,发现Android并没有直接提供软键盘的d出与隐藏判断,一些解决方案诸如判断父控件的高度或者判断

12

if(getWindow()getAttributes()softInputMode==WindowManagerLayoutParamsSOFT_INPUT_STATE_HIDDEN) 隐藏键盘;

的方法并没有用,于是便从官方文档着手。

发现InputMethodManager有一个方法isActive(View view):如果view是输入法的活动view,则返回true。也就是说,如果是由view触发d出软键盘,则返回true。哇,那问题就好办了

12

if(isActive(edittext)) 隐藏键盘

接着让另一个view强制获取焦点,这样isActivite(ediitext)就为false

这个方法比较简单,代码比较短,也很好理解,希望能够帮助有需要的人,也不枉费我调试几个小时的功夫。

附上代码:

12345678

InputMethodManager inputMethodManager = (InputMethodManager)getActivity()getSystemService(ContextINPUT_METHOD_SERVICE);<br>private boolean hideKeyboard(){ if(inputMethodManagerisActive(searchEditText)){<br>//因为是在fragment下,所以用了getView()获取view,也可以用findViewById()来获取父控件 getView()requestFocus();//使其它view获取焦点这里因为是在fragment下,所以便用了getView(),可以指定任意其它view inputMethodManagerhideSoftInputFromWindow(getActivity()getCurrentFocus()getWindowToken(), InputMethodManagerHIDE_NOT_ALWAYS); return true; } return false; }

ps:如果是手动d出键盘,getActivity()getCurrentFocus()改成searchEditText并且手动d出的键盘isActivie()失效,可用标记来判断

获取键盘信息

2942 获取键盘信息

在VBA中,没有提供获取键盘状态函数。在程序中若需要查询键盘状态,可编写代码调用API函数节器完成。

1.GetKeyState函数

使用该函数可获取键盘锁定键的状态,函数原型如下:

Public Declare Function GetKeyState Lib

"user32" (ByVal nVirtKey As Long) As Integer

参数nVirtKey为需要获取状态的键常数,在VBA中,每个键都有一个对应的常数,例如,CapsLock键的常数为vbKeyCapital。

该函数返回值为一个整型值,如果最低位为1,则表示锁定键是打开的,因此可以使用以下代码来判断:

CBool(GetKeyState(vbKeyCapital) And 1)

将GetKeyState函数的返回值与整数1进行逻辑与运算,来取得返回值的最低位,然后通过CBool函数将其转换为逻辑值,即可得到指定锁定键的状态。

2.GetKeyboardState函数和SetKeyboardState函数

设置锁定键状态需使用GetKeyboardState和SetKeyboardState函数来 *** 作。这两个函数都用一个256字节缓冲区取得或设置256个键设置,在VBA中设置一个有256个元素的字节数组来作为缓冲区,这个数组记录着键盘状态,每个键在数组中的位置由VK_常数决定。

一旦用GetKeyboardState函数取得键盘各键状态并存储到缓冲区中后,即可修改特定的键设置,然后用SetKeyboardState函数存回设置,达到修改键设置的目的。

GetKeyboardState函数可取得键盘上每个虚拟键当前的状态,其函数原型如下:

Declare Function GetKeyboardState

Lib "user32" Alias "GetKeyboardState" _

(pbKeyState As Byte) As Long

参数pbKeyState为具有256个元素的字节数组的第一个项目。

如果函数返回非0表示成功,返回0则表示失败。

SetKeyboardState函数用来设置每个虚拟键当前在键盘上的状态,其声明格式如下:

Declare Function SetKeyboardState Lib

"user32" Alias "SetKeyboardState" _

(lppbKeyState As Byte) As Long

了解设置键盘状态的函数后,就可以在VBA中编写代码,用来设置锁定键的状态。具体步骤如下:

(1)在Excel中按快捷键Alt+F11进入VBE。

(2)单击菜单插入|模块命令,向工程中插入一个模块体。

(3)在模块的声明部分粘贴API函数的定义如下:

Public Declare Function GetKeyState Lib

"user32" (ByVal nVirtKey As Long) As Integer

Public Declare Function GetKeyboardState

Lib "user32" (pbKeyState As Byte) As Long

Public Declare Function SetKeyboardState

Lib "user32" (lppbKeyState As Byte) As Long

(4)编写修改锁定键状态的通用子过程,具体代码如下:

Sub SetKeyState(intVKey As Integer, bState As Boolean) '修改键盘状态

Dim aBuffer(0 To 255) As Byte '定义数组作为缓冲区

GetKeyboardState aBuffer(0) '获取键盘状态放入缓冲区

aBuffer(intVKey) = CByte(Abs(bState)) '在缓冲区修改指定键的状态

SetKeyboardState aBuffer(0) '使用缓冲区修改键的状态

End Sub

程序中使用数组的第一个元素作为参数传递给两个API函数,由于数组在VBA中是连续存放的,所以API函数通过第一个元素的地址就可访问到后面的所有元素。

(5)有了通用函数SetKeyState,就可以很方便地编写修改锁定键状态的代码了。例如,以下代码可修改CapsLock键的状态(在大小写之间相互切换):

Sub ModiCapsLock() '大写锁定

If CBool(GetKeyState(vbKeyCapital) And 1)

Then '获取CapsLock原来的状态

SetKeyState vbKeyCapital, False '关闭

Else

SetKeyState vbKeyCapital, True '打开

End If

End Sub

程序首先使用GetKeyState函数查询CapsLock原来的状态,再将其状态进行切换(即如果原来是打开的,就将其关闭;如果原来是关闭的,就将其打开)。

以上就是关于如何获取android的软键盘的显示状态全部的内容,包括:如何获取android的软键盘的显示状态、vba 如何获取键盘消息、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/10132418.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存