安卓功能记录之点击键盘外关闭软键盘,用于日常记录

//关闭软键盘@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {if (ev.getAction() == MotionEvent.ACTION_DOWN) {View v = getCurrentFocus();if (isShouldHideInput(v, ev)) {InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);if (imm != null) {imm.hideSoftInputFromWindow(v.getWindowToken(), 0);}}return super.dispatchTouchEvent(ev);}// 必不可少,否则所有的组件都不会有TouchEvent了if (getWindow().superDispatchTouchEvent(ev)) {return true;}return onTouchEvent(ev);}public  boolean isShouldHideInput(View v, MotionEvent event) {if (v != null && (v instanceof EditText)) {int[] leftTop = { 0, 0 };//获取输入框当前的location位置v.getLocationInWindow(leftTop);int left = leftTop[0];int top = leftTop[1];int bottom = top + v.getHeight();int right = left + v.getWidth();if (event.getX() > left && event.getX() < right&& event.getY() > top && event.getY() < bottom) {// 点击的是输入框区域,保留点击EditText的事件return false;} else {return true;}}return false;}

在fragment中关闭软键盘方法:

在fragment中由于没有onTouchEvent重写所以可以在onCreateView中,对view使用以下方法:

view.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
         InputMethodManager manager = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
         if(event.getAction() == MotionEvent.ACTION_DOWN){  
             if(getActivity().getCurrentFocus()!=null && getActivity().getCurrentFocus().getWindowToken()!=null){  
               manager.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);  
             }  
          }  
        return false;
    }
});

当你的activity或者fragment中包含scrollview的时候 无法调用  Fragment中这样来调用:

public static void hintKeyboard(Activity activity) {
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
    if (imm.isActive() && activity.getCurrentFocus() != null) {
        if (activity.getCurrentFocus().getWindowToken() != null) {
            imm.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
        }
    }
}

/**
 * 设置点击软键盘之外区域,软键盘消失
 *
 * @param view
 */
public void setHintKeyboardView(View view) {
    if (!(view instanceof EditText)) {
        view.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                hintKeyboard(getActivity());
                return false;
            }
        });
    }
    if (view instanceof ViewGroup) {
        for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
            View innerView = ((ViewGroup) view).getChildAt(i);
            setHintKeyboardView(innerView);
        }
    }
}

android点击键盘外关闭软键盘相关推荐

  1. DialogFragment常见问题(黑色棱角、点击编辑框外关闭软键盘..)

    1.设置对话框外部的背景为完全透明: 在onStart()方法中加入以下代码: @Overridepublic void onStart() {super.onStart();/*** 将对话框外部( ...

  2. android 关闭软键盘,点击软键盘之外关闭软键盘,editText关闭键盘

    /*** @description 关闭界面软键盘方法 复制直接调closeKeyBoard()用即可实现关闭软键盘*/ private InputMethodManager mImm; public ...

  3. 点击空白区域关闭软键盘

    很多时候,需求需要点击输入框其他地方,关闭软键盘,下面分享一个utils public class HideKeyBroadUtils {private HideKeyBroadUtils(){}/* ...

  4. Android 点击空白出隐藏软键盘

    /*** 点击空白位置 隐藏软键盘*/@Overridepublic boolean onTouchEvent(MotionEvent event) {if (null != this.getCurr ...

  5. Android 点击屏幕空白处隐藏软键盘

    前言 最近在重构老项目 把之前的拍照功能也搬过来了 在输入打卡号的时候 软键盘一直在打开着 点签到按钮 很麻烦 所以想实现 点击屏幕空白处隐藏软键盘!! 封装工具 据传入控件的坐标和用户的焦点坐标,判 ...

  6. 点击Home键关闭软键盘

    有的小伙伴在Android项目开发中可能遇到了在点击Home键时关闭系统软键盘的问题.对于这个问题,可以通过注册广播的形式解决.现分享一段代码,仅供参考. public class HideSoftI ...

  7. android软键盘设置收起键,Android 点击任意位置收起软键盘

    @Override public boolean dispatchTouchEvent(MotionEvent ev) { AppUtils.hideInputWhenTouchOtherView(t ...

  8. android 点击关闭软键盘

    在项目中,editText获取焦点后,会自动弹出软键盘,关闭的时候一般需要按返回键或者点击软键盘上的按钮, 即使当前activity已经finish掉,软键盘依然存在,会影响用户的体验. 网上目前有很 ...

  9. android点击软键盘外面的区域关闭软键盘解决办法

    很多时候在一个页面有多个输入框或者输入框加选择框的时候,我们需要根据用户的点击去关闭软键盘. 在Activity中加入以下代码即可 /**重写dispatchTouchEvent* 点击软键盘外面的区 ...

最新文章

  1. POJ 2388 Who's in the Middle
  2. 卡片的sak为不支持的类型_“师傅”两字是不能随便叫的!78%的网友不支持称顺风车主为“师傅”...
  3. JAVA高级工程师课程笔记整理——(八)tomcat与九大内置对象
  4. Lombok 使用小结
  5. 电路 第五版 第二章 电阻电路的等效变换
  6. 信息学奥赛一本通C++语言——1037:计算2的幂
  7. AI(3)--手机上的AI技术
  8. 女子多年未住别墅成剧组拍摄地,网友:看个剧才想起自己还有栋别墅
  9. Spring Mvc + Spring + Mybatis3 搭建Web工程详解
  10. C语言程序设计基础实验教程,C语言程序设计基础实验教程
  11. android 查看gpu频率_借骁龙 855 Plus,聊聊 CPU / GPU 怎样影响手机游戏性能
  12. centos7 安装 php7
  13. compileflow 淘宝工作流引擎
  14. 计算机电子表格考点,计算机一级考试历年常见考点总结:Excel电子表格
  15. 在 Half-Life MOD 中创建自己的武器及弹药
  16. Python学习笔记--day15 内置模块和开发规范
  17. 计算机网络 lab2 Ethernet
  18. Windows模拟器推荐
  19. Python爬虫BS4库的解析器正确使用方法
  20. 基于ESB的业务集成业务梳理

热门文章

  1. 为何如此之快?ClickHouse的核心特性及架构
  2. XUPT Linux Group 2020 2021 2022 note
  3. 安装.NET Framework 4.6.1
  4. Java中的权限修饰符和状态修饰符
  5. Linux之四剑客之awk
  6. 小红书文案怎么写才能吸引用户,品牌写文技巧
  7. Windows 10 硬盘安装 Ubuntu 20.04 教程 (MBR)
  8. tensorflow花朵分类
  9. 框架:你会用又能写,但是你能说明白什么是框架吗
  10. java metadata 使用_Java DatabaseMetaData getTables()方法与示例