关于activity和fragment中点击edittext之外的空白区域使软键盘消失的解决办法
来源:互联网 发布:企业网络规划图 编辑:程序博客网 时间:2024/05/21 22:34
大家都知道的使软键盘消失的方法很简单 如下
<span style="font-size:24px;">InputMethodManager imm = (InputMethodManager) getSystemService( INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);</span>
当然我知道你想要的是点击空白地方使输入框消失代码如下
可以在activity中重写onTouchEvent
// 点击空白区域 自动隐藏软键盘 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); }
在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中重写onTouchEvent然后在fragment中调用如下方法
view.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { getActivity().onTouchEvent(event); return false; } });
上面的问题都不大,但是当你的activity或者fragment中包含scrollview的时候,你会发现你的onTouchEvent()根本不会得到调用,这个时候你就慌了,接着你会去想方法设法的实现touch,click,focus监听,然而你会发现然并卵,你就会去思考,能不能重写scrollview来拦截touch事件,然而你会发现仍然是然并卵,那么到底如何解决呢?
步骤如下
1一个公共的方法 用来隐藏软键盘
public static void hideSoftKeyboard(Activity activity) { InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService( Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow( activity.getCurrentFocus().getWindowToken(), 0);}2,在BaseActivity中或者BaseFragment中这样来调用,当然这里你要区分获得当前使用的是哪个activity或者哪个fragment(如何确定当前是哪个fragment这个可以定义接口来回调就好)---当然你也可以在你需要的activity或fragment中直接调用这种方式不推荐
public void setupUI(View view) { // Set up touch listener for non-text box views to hide keyboard. if (!(view instanceof EditText)) { view.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { hideSoftKeyboard(MyActivity.this); return false; } }); } //If a layout container, iterate over children and seed recursion. if (view instanceof ViewGroup) { for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { View innerView = ((ViewGroup) view).getChildAt(i); setupUI(innerView); } }}注意:在fragment中你可以直接将onCreateView中的view传递到setupUI的参数当中
对于为什么包含scrollview的activity和fragment会不调用onTouch事件,后续会在研究过scrollview源码之后在此博客内容下补充,当然也欢迎大神来帮忙解答,么么哒~.~
1 0
- 关于activity和fragment中点击edittext之外的空白区域使软键盘消失的解决办法
- Android 点击EditText的时候弹出软键盘,点击EditText之外空白处软键盘消失
- Android--点击EditText的时候弹出软键盘,点击EditText之外空白处软键盘消失
- 点击Edittext之外的区域软键盘的显示和隐藏
- Android 点击空白区域 软键盘消失
- 在Android中如何通过点击edittext之外的部分使软键盘隐藏
- 在Android中如何通过点击edittext之外的部分使软键盘隐藏
- 在Android中如何通过点击edittext之外的部分使软键盘隐藏
- Android 通过点击EditText之外的地方隐藏软键盘
- EditText之外的地方点击怎么隐藏软键盘
- Android 通过点击EditText之外的地方隐藏软键盘
- Android点击EditText之外的地方隐藏软键盘同时使EditText失去焦点
- 点击popupwindow窗口之外的区域使popupwindow消失
- 关于普通和Fragment点击空白地方隐藏软键盘
- android listview 点击空白区域 软键盘消失
- android listview 点击空白区域 软键盘消失
- android点击空白区域隐藏软键盘的实现
- 点击空白处隐藏软键盘(点击EditText以外的地方隐藏软键盘)
- ubuntu code::blocks 汉化
- Mac OS X 中安装 brew
- WR720N刷OpenWRT开启IPv6教程
- esrally性能测试原理
- NKOI 1947 软件补丁
- 关于activity和fragment中点击edittext之外的空白区域使软键盘消失的解决办法
- MSP430 Flash信息区
- AI象棋中的,最大最小值算法思路
- 粗糙的玩一玩javascript的"编译"(1)
- 洛谷 P2278 03湖南 操作系统
- java中this的用法
- 剑指offer面试题52
- BZOJ[1750/3384]: [Usaco2005 qua]Apple Catching
- JZOJ 4586 Ned 的难题【NOIP2016模拟7.7】