zoukankan      html  css  js  c++  java
  • android 软键盘监听显示和隐藏

    githup中找到:https://github.com/yescpu/KeyboardChangeListener

    import android.app.Activity;
    import android.os.Build;
    import android.util.Log;
    import android.view.View;
    import android.view.ViewTreeObserver;
    
    /**
     * simple and powerful Keyboard show/hidden listener,view {@android.R.id.content} and {@ViewTreeObserver.OnGlobalLayoutListener}
     * Created by yes.cpu@gmail.com 2016/7/13.
     */
    public class KeyboardChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {
        private static final String TAG = "ListenerHandler";
        private View mContentView;
        private int mOriginHeight;
        private int mPreHeight;
        private KeyBoardListener mKeyBoardListen;
    
        public interface KeyBoardListener {
            /**
             * call back
             * @param isShow true is show else hidden
             * @param keyboardHeight keyboard height
             */
            void onKeyboardChange(boolean isShow, int keyboardHeight);
        }
    
        public void setKeyBoardListener(KeyBoardListener keyBoardListen) {
            this.mKeyBoardListen = keyBoardListen;
        }
    
        public KeyboardChangeListener(Activity contextObj) {
            if (contextObj == null) {
                Log.i(TAG, "contextObj is null");
                return;
            }
            mContentView = findContentView(contextObj);
            if (mContentView != null) {
                addContentTreeObserver();
            }
        }
    
        private View findContentView(Activity contextObj) {
            return contextObj.findViewById(android.R.id.content);
        }
    
        private void addContentTreeObserver() {
            mContentView.getViewTreeObserver().addOnGlobalLayoutListener(this);
        }
    
        @Override
        public void onGlobalLayout() {
            int currHeight = mContentView.getHeight();
            if (currHeight == 0) {
                Log.i(TAG, "currHeight is 0");
                return;
            }
            boolean hasChange = false;
            if (mPreHeight == 0) {
                mPreHeight = currHeight;
                mOriginHeight = currHeight;
            } else {
                if (mPreHeight != currHeight) {
                    hasChange = true;
                    mPreHeight = currHeight;
                } else {
                    hasChange = false;
                }
            }
            if (hasChange) {
                boolean isShow;
                int keyboardHeight = 0;
                if (mOriginHeight == currHeight) {
                    //hidden
                    isShow = false;
                } else {
                    //show
                    keyboardHeight = mOriginHeight - currHeight;
                    isShow = true;
                }
    
                if (mKeyBoardListen != null) {
                    mKeyBoardListen.onKeyboardChange(isShow, keyboardHeight);
                }
            }
        }
    
        public void destroy() {
            if (mContentView != null) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    mContentView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                }
            }
        }
    }

    KeyboardChangeListener

    simple and powerful Keyboard show/hidden change listener,without having to add a layout and can run in every Activity;

    useage

    make activity:

    android:windowSoftInputMode="adjustResize"

    java:

    new KeyboardChangeListener(this).setKeyBoardListener(new KeyboardChangeListener.KeyBoardListener() {
                @Override
                public void onKeyboardChange(boolean isShow, int keyboardHeight) {
                    Log.d(TAG, "isShow = [" + isShow + "], keyboardHeight = [" + keyboardHeight + "]");
                }
            });

    #enjoy!

    感谢作者!

  • 相关阅读:
    vector tips
    DataTable DataRow String Tips...
    Virtual Key Codes
    有关多线程的一些技术问题
    用异步的方式调用同步方法
    C#线程锁(下)
    C#线程锁(中)
    Web应用中并发控制的实现
    主题:数据库事务与并发(Hibernate)
    前端开发桌面终极工具(FastStone Capture)推荐(转)
  • 原文地址:https://www.cnblogs.com/woaixingxing/p/6970575.html
Copyright © 2011-2022 走看看