Android开发中,怎样监听键盘弹出收回事件

注意:
1.在支持分屏的Android系统下,这个策略可能有问题。
2.如果在Fragment中使用,记得退出时remove掉ViewTreeObserver的监听,否则会造成view的泄露。
参考:How to check visibility of software keyboard in Android?
import android.app.Activity;import android.app.Fragment;import android.graphics.Rect;import android.view.View;import android.view.ViewTreeObserver.OnGlobalLayoutListener;/** * \u0026lt;p\u0026gt;Detects Keyboard Status changes and fires events only once for each change.\u0026lt;/p\u0026gt; */public class KeyboardStatusDetector { private static final int SOFT_KEY_BOARD_MIN_HEIGHT = 100; private KeyboardVisibilityListener mVisibilityListener; boolean keyboardVisible = false; public void registerFragment(Fragment f) { registerView(f.getView()); } public void registerActivity(Activity a) { registerView(a.getWindow().getDecorView().findViewById(android.R.id.content)); } public KeyboardStatusDetector registerView(final View v) { v.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect r = new Rect(); v.getWindowVisibleDisplayFrame(r); int heightDiff = v.getRootView().getHeight() - (r.bottom - r.top); if (heightDiff \u0026gt; SOFT_KEY_BOARD_MIN_HEIGHT) { // if more than 100 pixels, its probably a keyboard... if (!keyboardVisible) { keyboardVisible = true; if (mVisibilityListener != null) { mVisibilityListener.onVisibilityChanged(true); } } } else { if (keyboardVisible) { keyboardVisible = false; if (mVisibilityListener != null) { mVisibilityListener.onVisibilityChanged(false); } } } } }); return this; } public KeyboardStatusDetector setmVisibilityListener(KeyboardVisibilityListener listener) { mVisibilityListener = listener; return this; } public interface KeyboardVisibilityListener { void onVisibilityChanged(boolean keyboardVisible); }}使用:
new KeyboardStatusDetector() .registerFragment(fragment) //register to a fragment .registerActivity(activity) //or register to an activity .registerView(view) //or register to a view .setVisibilityListener(new KeyboardVisibilityListener() { @Override public void onVisibilityChanged(boolean keyboardVisible) { if(keyboardVisible) { //Do stuff for keyboard visible }else { //Do stuff for keyboard hidden } } });
■网友


推荐阅读