在android中如何通过点击edittext之外的部分使软键盘隐藏
我们知道在android中点击edittext框就会自动弹出软键盘,那怎么通过点击edittext之外的部分使软键盘隐藏呢?(微信聊天时的输入框就是这个效果,这个给用户的体验还是很不错的)
首先我们要先定义一个隐藏软键盘的工具类方法:
1 public static void hideSoftKeyboard(Activity activity) { 2 InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 3 inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 4 }
接下来的问题是应该怎么调用这个方法了,我们可以给我们的activity中的每个组件注册一个OnTouchListener监听器,这样只要我们手指接触到了其他组件,就会触发OnTouchListener监听器的onTouch方法,从而调用上面的隐藏软键盘的方法来隐藏软键盘。
这里还有一个问题就是如果activity中有很多组件怎么办,难不成每个组件都要写代码去注册这个OnTouchListener监听器?大可不必,我们只要找到根布局,然后让根布局自动找到其子组件,再递归注册监听器即可,详见下面代码:
1 public void setupUI(View view) { 2 //Set up touch listener for non-text box views to hide keyboard. 3 if(!(view instanceof EditText)) { 4 view.setOnTouchListener(new OnTouchListener() { 5 public boolean onTouch(View v, MotionEvent event) { 6 hideSoftKeyboard(Main.this); //Main.this是我的activity名 7 return false; 8 } 9 }); 10 } 11 12 //If a layout container, iterate over children and seed recursion. 13 if (view instanceof ViewGroup) { 14 for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) { 15 View innerView = ((ViewGroup) view).getChildAt(i); 16 setupUI(innerView); 17 } 18 } 19 }
总的来说,我们在执行了actvity的oncreateview方法之后就调用setupUI(findViewById(R.id.root_layout))就可以了(其中root_layout为我们的根布局id)。是不是很简单了?:)
这里要谢过stackoverflow上的大神(本文基本为翻译):http://stackoverflow.com/questions/4165414/how-to-hide-soft-keyboard-on-android-after-clicking-outside-edittext
建议广大程序员们多用google,中文搜不到要试试英文搜索,比如这篇答案就是我用关键字“android hide keyboard click outside”搜出来的。
作者:beanmoon
出处:http://www.cnblogs.com/beanmoon/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
该文章也同时发布在我的独立博客中-豆月博客。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构