Android点击EditText文本框之外任何地方隐藏键盘的解决办法

  

  

通过给当前界面布局文件的父布局设置点击事件(相当于给整个活动设置点击事件),在事件里进行键盘隐藏

        & lt; LinearLayout xmlns: android=" http://schemas.android.com/apk/res/android "   android: id=癅 + id/traceroute_rootview”   android: layout_width="宽和"   android: layout_height="宽和"   android:背景=" @color/白”   android:点击=" true "   android:重力=" center_horizontal "   面向android:=按怪薄北?   & lt;/LinearLayout>之前      

加上id和点击=true

  

然后在onCreate里,添加onClick事件的监听:

        findViewById (R.id.traceroute_rootview) .setOnClickListener(这个);之前      

在onClick中:

        @Override   公共空间>   @Override   公共布尔dispatchTouchEvent (MotionEvent ev) {   如果(ev.getAction ()==MotionEvent.ACTION_DOWN) {   视图v=getCurrentFocus ();   如果(isShouldHideInput (v, ev)) {      InputMethodManager imm=(InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE);   如果(imm !=null) {   imm.hideSoftInputFromWindow (v.getWindowToken (), 0);   }   }   返回super.dispatchTouchEvent (ev);   }//必不可少,否则所有的组件都不会有TouchEvent了   如果(getWindow () .superDispatchTouchEvent (ev)) {   返回true;   }   返回>   公共布尔isShouldHideInput (v, MotionEvent事件){   如果(v !=零,,(v instanceof EditText)) {   int [] leftTop={0};//获取输入框当前的位置位置   v.getLocationInWindow (leftTop);   int左=leftTop [0];   int顶级=leftTop [1];   int底部=最高+ v.getHeight ();   int右=左+ v.getWidth ();   如果(event.getX()在离开,,event.getX () & lt;正确的   ,,event.getY()比;前,,event.getY () & lt;底部){//点击的是输入框区域,保留点击EditText的事件   返回错误;   其他}{   返回true;   }   }   返回错误;   }      

这种方法实现起来比较麻烦,解决思路与iOS中的事件分发机制是类似,对于处理隐藏事件比较清晰,通过层层事件分发,然后判断是否在需要屏蔽的区域。

  

  

通过给当前界面布局文件的父布局设置点击事件(相当于给整个活动设置点击事件),在事件里进行键盘隐藏

        & lt; LinearLayout xmlns: android=" http://schemas.android.com/apk/res/android "   android: id=癅 + id/traceroute_rootview”   android: layout_width="宽和"   android: layout_height="宽和"   android:背景=" @color/白”   android:点击=" true "   android:重力=" center_horizontal "   面向android:=按怪薄北?   & lt;/LinearLayout>之前      

加上id和点击=true

  

然后在onCreate里,添加onClick事件的监听:

        findViewById (R.id.traceroute_rootview) .setOnClickListener(这个);之前      

在onClick中:

        @Override   公共空间>   @Override   公共布尔dispatchTouchEvent (MotionEvent ev) {   如果(ev.getAction ()==MotionEvent.ACTION_DOWN) {   视图v=getCurrentFocus ();   如果(isShouldHideInput (v, ev)) {   InputMethodManager imm=(InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE);   如果(imm !=null) {   imm.hideSoftInputFromWindow (v.getWindowToken (), 0);   }   }   返回super.dispatchTouchEvent (ev);   }//必不可少,否则所有的组件都不会有TouchEvent了   如果(getWindow () .superDispatchTouchEvent (ev)) {   返回true;   }   返回>   公共布尔isShouldHideInput (v, MotionEvent事件){   如果(v !=零,,(v instanceof EditText)) {   int [] leftTop={0};//获取输入框当前的位置位置   v.getLocationInWindow (leftTop);   int左=leftTop [0];   int顶级=leftTop [1];   int底部=最高+ v.getHeight ();   int右=左+ v.getWidth ();   如果(event.getX()在离开,,event.getX () & lt;正确的   ,,event.getY()比;前,,event.getY () & lt;底部){//点击的是输入框区域,保留点击EditText的事件   返回错误;   其他}{   返回true;   }   }   返回错误;   }      

这种方法实现起来比较麻烦,解决思路与iOS中的事件分发机制是类似,对于处理隐藏事件比较清晰,通过层层事件分发,然后判断是否在需要屏蔽的区域。

  

以上所述是小编给大家介绍的Android点击EditText文本框之外任何地方隐藏键盘的解决办法,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

Android点击EditText文本框之外任何地方隐藏键盘的解决办法