通过给当前界面布局文件的父布局设置点击事件(相当于给整个活动设置点击事件),在事件里进行键盘隐藏
& 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文本框之外任何地方隐藏键盘的解决办法