猿问

如何检查Android中软件键盘的可见性?

如何检查Android中软件键盘的可见性?

我需要做一个非常简单的事情 - 找出是否显示了软件键盘。这在Android中可行吗?



慕尼黑5688855
浏览 475回答 3
3回答

有只小跳蛙

对于迟到的答案很抱歉,但是我创建了一个小助手类来处理打开/关闭事件,通知听众和其他有用的东西,可能有人会发现它有用:import&nbsp;android.graphics.Rect;import&nbsp;android.view.View;import&nbsp;android.view.ViewTreeObserver;import&nbsp;java.util.LinkedList;import&nbsp; java.util.List;public&nbsp;class&nbsp;SoftKeyboardStateWatcher&nbsp;implements&nbsp;ViewTreeObserver.OnGlobalLayoutListener&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;interface&nbsp;SoftKeyboardStateListener&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;onSoftKeyboardOpened(int&nbsp;keyboardHeightInPx); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;onSoftKeyboardClosed(); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;List<SoftKeyboardStateListener>&nbsp;listeners&nbsp;=&nbsp;new&nbsp;LinkedList<SoftKeyboardStateListener>(); &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;final&nbsp;View&nbsp;activityRootView; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lastSoftKeyboardHeightInPx; &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;boolean&nbsp;&nbsp;&nbsp;&nbsp;isSoftKeyboardOpened; &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;SoftKeyboardStateWatcher(View&nbsp;activityRootView)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this(activityRootView,&nbsp;false); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;SoftKeyboardStateWatcher(View&nbsp;activityRootView,&nbsp;boolean&nbsp;isSoftKeyboardOpened)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.activityRootView&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;activityRootView; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.isSoftKeyboardOpened&nbsp;=&nbsp;isSoftKeyboardOpened; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;onGlobalLayout()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;Rect&nbsp;r&nbsp;=&nbsp;new&nbsp;Rect(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//r&nbsp;will&nbsp;be&nbsp;populated&nbsp;with&nbsp;the&nbsp;coordinates&nbsp;of&nbsp;your&nbsp;view&nbsp;that&nbsp;area&nbsp;still&nbsp;visible. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activityRootView.getWindowVisibleDisplayFrame(r); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;int&nbsp;heightDiff&nbsp;=&nbsp;activityRootView.getRootView().getHeight()&nbsp;-&nbsp;(r.bottom&nbsp;-&nbsp;r.top); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(!isSoftKeyboardOpened&nbsp;&&&nbsp;heightDiff&nbsp;>&nbsp;100)&nbsp;{&nbsp;//&nbsp;if&nbsp;more&nbsp;than&nbsp;100&nbsp;pixels,&nbsp;its&nbsp;probably&nbsp;a&nbsp;keyboard... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isSoftKeyboardOpened&nbsp;=&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notifyOnSoftKeyboardOpened(heightDiff); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;if&nbsp;(isSoftKeyboardOpened&nbsp;&&&nbsp;heightDiff&nbsp;<&nbsp;100)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isSoftKeyboardOpened&nbsp;=&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;notifyOnSoftKeyboardClosed(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;setIsSoftKeyboardOpened(boolean&nbsp;isSoftKeyboardOpened)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.isSoftKeyboardOpened&nbsp;=&nbsp;isSoftKeyboardOpened; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;boolean&nbsp;isSoftKeyboardOpened()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;isSoftKeyboardOpened; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Default&nbsp;value&nbsp;is&nbsp;zero&nbsp;{@code&nbsp;0}. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;last&nbsp;saved&nbsp;keyboard&nbsp;height&nbsp;in&nbsp;px &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;int&nbsp;getLastSoftKeyboardHeightInPx()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;lastSoftKeyboardHeightInPx; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;addSoftKeyboardStateListener(SoftKeyboardStateListener&nbsp;listener)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listeners.add(listener); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;removeSoftKeyboardStateListener(SoftKeyboardStateListener&nbsp;listener)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listeners.remove(listener); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;notifyOnSoftKeyboardOpened(int&nbsp;keyboardHeightInPx)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.lastSoftKeyboardHeightInPx&nbsp;=&nbsp;keyboardHeightInPx; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(SoftKeyboardStateListener&nbsp;listener&nbsp;:&nbsp;listeners)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(listener&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.onSoftKeyboardOpened(keyboardHeightInPx); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;notifyOnSoftKeyboardClosed()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(SoftKeyboardStateListener&nbsp;listener&nbsp;:&nbsp;listeners)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(listener&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listener.onSoftKeyboardClosed(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}}用法示例:final&nbsp;SoftKeyboardStateWatcher&nbsp;softKeyboardStateWatcher&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;new&nbsp;SoftKeyboardStateWatcher(findViewById(R.id.activity_main_layout); &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Add&nbsp;listenersoftKeyboardStateWatcher.addSoftKeyboardStateListener(...);//&nbsp;then&nbsp;just&nbsp;handle&nbsp;callbacks
随时随地看视频慕课网APP

相关分类

Android
Java
我要回答