如何收听SoftInputMethod的显示/隐藏事件?

时间:2015-05-12 08:13:52

标签: android

我尝试以这种方式使用BroadcastReceiver来实现它。 但它不起作用。显示/隐藏事件永远不会进入我的接收器。

        filter = new IntentFilter();
        filter.addAction(Intent.ACTION_INPUT_METHOD_CHANGED);

        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
        registerReceiver(receiver, filter);  

我希望有些好人可以帮助我。

全部

1 个答案:

答案 0 :(得分:0)

希望它能为你提供帮助。

OnGlobalLayoutListener mOnGlobalLayoutListener;
private void performListenKeyboard() {
    if (mOnGlobalLayoutListener == null) {
        mOnGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {

                final int screenHeight = mRootView.getRootView().getHeight();
                int keyboardHeight = screenHeight - mRootView.getHeight();
                if (keyboardHeight < screenHeight / 3 || !isShowKeyboard) {
                    return;
                }
                // keyboard show,do something

                // at last , remove listener
                mRootView.getRootView().getViewTreeObserver().removeOnGlobalLayoutListener(mOnGlobalLayoutListener);
            }
        };
    }
    // register GlobalLayoutListener callback
    mRootView.getRootView().getViewTreeObserver()
            .addOnGlobalLayoutListener(mOnGlobalLayoutListener);
}