zoukankan      html  css  js  c++  java
  • 提供一个能够隐藏与显示软键盘以及监控软键盘状态的工具

    工具:KeyBoradUtil

    Kotlin 版:

    object KeyBoardUtil {
    
        fun hideSoftInput(activity: Activity) {
            val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm.hideSoftInputFromWindow(activity.currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
        }
    
        fun showSoftInput(view: EditText) {
            val imm = view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            view.requestFocus()
            imm.showSoftInput(view, 0)
        }
    
        fun toggleSoftInput(activity: Activity) {
            val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
            imm.toggleSoftInput(0, 0)
        }
    
        fun onSoftInputStateChanged(activity: Activity, show: () -> Unit = {}, hide: () -> Unit = {}) {
            var preUsableHeight = 0
            val group = activity.window.decorView.findViewById<View>(android.R.id.content)
            group.viewTreeObserver.addOnGlobalLayoutListener {
                preUsableHeight = possiblyResizeChildOfContent(preUsableHeight, group, show, hide)
            }
        }
    
        private fun possiblyResizeChildOfContent(preUsableHeight: Int, view: View, show: () -> Unit, hide: () -> Unit): Int {
            var temp = preUsableHeight
            val usableHeightNow = computeUsableHeight(view)
            if (temp == 0) {
                temp = usableHeightNow
            }
            if (usableHeightNow < temp) {
                show()
            }
            if (usableHeightNow > temp) {
                hide()
            }
            return usableHeightNow
        }
    
        private fun computeUsableHeight(view: View): Int {
            val r = Rect()
            view.getWindowVisibleDisplayFrame(r)
            return r.bottom - r.top
        }
    }

    Java 版:

    public class KeyBoardUtil {
    
        public static void hideSoftInput(Activity activity) {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            if (imm != null) {
                View currentFocus = activity.getCurrentFocus();
                if (currentFocus != null) {
                    imm.hideSoftInputFromWindow(currentFocus.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
                }
            }
        }
    
        public static void showSoftInput(EditText view) {
            InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
            view.requestFocus();
            if (imm != null) {
                imm.showSoftInput(view, 0);
            }
        }
    
        public static void toggleSoftInput(Activity activity) {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            if (imm != null) {
                imm.toggleSoftInput(0, 0);
            }
        }
    
        public static void onSoftInputStateChanged(Activity activity, final OnKeyBoardStateChangedListener listener) {
            if (listener == null) {
                return;
            }
            final int[] preUsableHeight = {0};
            final View group = activity.getWindow().getDecorView().findViewById(android.R.id.content);
            group.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    preUsableHeight[0] = possiblyResizeChildOfContent(preUsableHeight[0], group, listener);
                }
            });
        }
    
        private static int possiblyResizeChildOfContent(int preUsableHeight, View view, OnKeyBoardStateChangedListener listener) {
            int usableHeightNow = computeUsableHeight(view);
            if (preUsableHeight == 0) {
                preUsableHeight = usableHeightNow;
            }
            if (usableHeightNow < preUsableHeight) {
                listener.onShow();
            }
            if (usableHeightNow > preUsableHeight) {
                listener.onHide();
            }
            return usableHeightNow;
        }
    
        private static int computeUsableHeight(View view) {
            Rect r = new Rect();
            view.getWindowVisibleDisplayFrame(r);
            return r.bottom - r.top;
        }
    
    
        interface OnKeyBoardStateChangedListener {
            /**
             * 键盘显示
             */
            void onShow();
    
            /**
             * 键盘隐藏
             */
            void onHide();
        }
    }

       我在 Github 上创建了一个库,会有其他工具的继续更新:

       https://github.com/meetsl/CommonUtils

  • 相关阅读:
    遗传算法-目标函数与适应度函数变换
    遗传算法-编码
    Python 绘制甘特图
    fiddler抓包
    使用msf查询补丁和可利用提权漏洞
    Shodan入坑指南
    python 项目自动生成requirements.txt文件
    Tomcat 基于端口的虚拟主机配置
    python简单搭建http server
    metasploit后渗透 之 portfwd端口重定向
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/9694897.html
Copyright © 2011-2022 走看看