android键盘的监听
16lz
2022-03-30
android 键盘监听
从知乎上看到的一种解决方案,目前还没发现有什么坑。
public class SoftKeyBroadManager implements ViewTreeObserver.OnGlobalLayoutListener{ public interface SoftKeyboardStateListener { void onSoftKeyboardOpened(int keyboardHeightInPx); void onSoftKeyboardClosed(); } private final List listeners = new LinkedList(); private final View activityRootView; private int lastSoftKeyboardHeightInPx; private boolean isSoftKeyboardOpened; public SoftKeyBroadManager(View activityRootView) { this(activityRootView,false); } public SoftKeyBroadManager(View activityRootView, boolean isSoftKeyboardOpened) { this.activityRootView = activityRootView; this.isSoftKeyboardOpened = isSoftKeyboardOpened; activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(this); } @Override public void onGlobalLayout() { final Rect r = new Rect(); activityRootView.getWindowVisibleDisplayFrame(r); final int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top); if (!isSoftKeyboardOpened && heightDiff > 500) { // 如果高度超过500 键盘可能被打开 isSoftKeyboardOpened = true; notifyOnSoftKeyboardOpened(heightDiff); } else if (isSoftKeyboardOpened && heightDiff < 500) { isSoftKeyboardOpened = false; notifyOnSoftKeyboardClosed(); } } public void setIsSoftKeyboardOpened(boolean isSoftKeyboardOpened) { this.isSoftKeyboardOpened = isSoftKeyboardOpened; } public boolean isSoftKeyboardOpened() { return isSoftKeyboardOpened; } public int getLastSoftKeyboardHeightInPx() { return lastSoftKeyboardHeightInPx; } public void addSoftKeyboardStateListener(SoftKeyboardStateListener listener) { listeners.add(listener); } public void removeSoftKeyboardStateListener(SoftKeyboardStateListener listener) { listeners.remove(listener); } private void notifyOnSoftKeyboardOpened(int keyboardHeightInPx) { this.lastSoftKeyboardHeightInPx = keyboardHeightInPx; for (SoftKeyboardStateListener listener : listeners) { if (listener != null) { listener.onSoftKeyboardOpened(keyboardHeightInPx); } } } private void notifyOnSoftKeyboardClosed() { for (SoftKeyboardStateListener listener : listeners) { if (listener != null) { listener.onSoftKeyboardClosed(); } } }}
使用方法
softKeyBroadManager = new SoftKeyBroadManager(root); softKeyBroadManager.addSoftKeyboardStateListener(softKeyboardStateListener);private SoftKeyBroadManager.SoftKeyboardStateListener softKeyboardStateListener = new SoftKeyBroadManager.SoftKeyboardStateListener() { @Override public void onSoftKeyboardOpened(int keyboardHeightInPx) { PandaLogUtils.getInstance().i("键盘打开"); } @Override public void onSoftKeyboardClosed() { PandaLogUtils.getInstance().i("键盘关闭"); //重新算价 calculate(); } };
更多相关文章
- Android完美禁用Home键
- android简单的动态控制软键盘的显隐
- android短信窃听器,娱乐版,效果可以实现
- android > 手机MIC,听筒音量监听
- Android代码实现飞行模式的打开
- Android(安卓)监听各个Acitivity的生命周期
- [置顶] android软键盘的隐藏问题
- Android——布局的一些动态设置
- android 打开ap热点