美文网首页
框架整理系列十一(KeyboardUtils)

框架整理系列十一(KeyboardUtils)

作者: I_Gisvity | 来源:发表于2017-04-19 09:26 被阅读0次

    常用软键盘控制

    
    import android.app.Activity;
    import android.content.Context;
    import android.util.Log;
    import android.view.View;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.EditText;
    
    /**
     * @author sunyaxi
     * @date 2016/11/17.
     */
    public class KeyboardUtils {
    
        /**
         * 动态隐藏软键盘
         */
        public static void hideSoftInput(Activity activity) {
            View view = activity.getWindow().peekDecorView();
            if (view != null) {
                InputMethodManager inputManger = (InputMethodManager) activity
                        .getSystemService(Context.INPUT_METHOD_SERVICE);
                inputManger.hideSoftInputFromWindow(view.getWindowToken(), 0);
            }
        }
    
        /**
         * 动态隐藏软键盘
         */
        public static void hideSoftInput(Context context, View view) {
            view.clearFocus();
            InputMethodManager inputManger = (InputMethodManager) context
                    .getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManger.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
    
        /**
         * 动态显示软键盘
         */
        public static void showSoftInput(Context context, EditText edit) {
            edit.setFocusable(true);
            edit.setFocusableInTouchMode(true);
            edit.requestFocus();
            InputMethodManager inputManager = (InputMethodManager) context
                    .getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.showSoftInput(edit, 0);
        }
    
        /**
         * 切换键盘显示与否状态
         */
        public static void toggleSoftInput(Context context, EditText edit) {
            edit.setFocusable(true);
            edit.setFocusableInTouchMode(true);
            edit.requestFocus();
            InputMethodManager inputManager = (InputMethodManager) context
                    .getSystemService(Context.INPUT_METHOD_SERVICE);
            inputManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
        }
    
        /**
         * 点击屏幕空白区域隐藏软键盘(方法1)
         * 在onTouch中处理,未获焦点则隐藏
         * 参照以下注释代码
         */
        public static void clickBlankArea2HideSoftInput0() {
            Log.i("tips", "U should copy the following code.");
            /*
            @Override
            public boolean onTouchEvent (MotionEvent event){
                if (null != this.getCurrentFocus()) {
                    InputMethodManager mInputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
                    return mInputMethodManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), 0);
                }
                return super.onTouchEvent(event);
            }
            */
        }
    
        /**
         * 点击屏幕空白区域隐藏软键盘(方法2)
         * 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘
         * 需重写dispatchTouchEvent
         * 参照以下注释代码
         */
        public static void clickBlankArea2HideSoftInput1() {
            Log.i("tips", "U should copy the following code.");
            /*
            @Override
            public boolean dispatchTouchEvent(MotionEvent ev) {
                if (ev.getAction() == MotionEvent.ACTION_DOWN) {
                    View v = getCurrentFocus();
                    if (isShouldHideKeyboard(v, ev)) {
                        hideKeyboard(v.getWindowToken());
                    }
                }
                return super.dispatchTouchEvent(ev);
            }
            // 根据EditText所在坐标和用户点击的坐标相对比,来判断是否隐藏键盘
            private boolean isShouldHideKeyboard(View v, MotionEvent event) {
                if (v != null && (v instanceof EditText)) {
                    int[] l = {0, 0};
                    v.getLocationInWindow(l);
                    int left = l[0],
                            top = l[1],
                            bottom = top + v.getHeight(),
                            right = left + v.getWidth();
                    return !(event.getX() > left && event.getX() < right
                            && event.getY() > top && event.getY() < bottom);
                }
                return false;
            }
            // 获取InputMethodManager,隐藏软键盘
            private void hideKeyboard(IBinder token) {
                if (token != null) {
                    InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
                }
            }
            */
        }
    }
    

    福利不可少


    相关文章

      网友评论

          本文标题:框架整理系列十一(KeyboardUtils)

          本文链接:https://www.haomeiwen.com/subject/adsczttx.html