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!

    感谢作者!

  • 相关阅读:
    2015.2.27 UltraEdit中显示XML结构
    2015.1.31 DataGridView自动滚动到某行
    2015.1.15 利用函数实现将一行记录拆分成多行记录 (多年想要的效果)
    2015.1.15 利用Oracle函数返回表结果 重大技术进步!
    2015.1.15 利用Oracle函数插入表结构 Bulk collect into 不用循环,简洁高效
    2015.1.8 Left join 左连接
    2015.1.10 解决DataGridView SelectionChanged事件自动触发问题
    delphi 遍历窗口
    delphi 访问 protected 属性 哈哈
    clientdataset 读取excel 如果excel 文件不存在的时候 相应的gird 会不显示数据, 鼠标掠过 gird 格子 才会显示数据。 这是一个bug 哈哈
  • 原文地址:https://www.cnblogs.com/woaixingxing/p/6970575.html
Copyright © 2011-2022 走看看