分享

一行代码实现Android软键盘与EditText的交互

 fishpan_oliver 2017-06-06

本文作者


本文由会煎蛋的猿投稿。

会煎蛋的猿的博客地址:

http://blog.csdn.net/zybieku


1

前言


Android 应用开发必不可少的涉及软键盘操作,也不可避免的遇到一些问题,这里主要总结主要针对几种不同的场景,分享相应的处理经验;


有一个很常见的需求,就是页面中软键盘打开时,希望能点击屏幕其他的任何位置,就能把软键盘给隐藏掉.比如登录, 注册之类的常见页面. 


在实际开发中,很多童鞋是这样做的,通过其他控件的点击事件,在onclick方法中调用隐藏软键盘的方法,从而达到相应效果,但是在页面复杂的时候,要实现的onclick方法会很多,甚至还会有逻辑处理冲突的情况.这样做就显得非常不友好.



今天,纯洁的我,就针对这样的情况,给各位大佬分享,怎样通过一行代码实现软键盘与EditText的交互.


先看效果图 


是不是觉得效果很棒,而且实现方式简单,只要一行代码你就可以把这种效果带回家. 

2

上码



我们只要在hideSoftByEditViewIds()方法中直接return int数组即可,int值为editText的id,然后就完成了. 


真的可以了嘛?是的! 

不过作为一个有格调的程序员,几行代码实现写个博客不符合我的逼格. 
所以我们还是先简单介绍具体实现的原理.


原理 : 就是重写Activity的dispatchTouchEvent(MotionEvent ev)方法,全局监听触摸事件, 当点击的页面时,发现如果焦点在EditView上,就把软键盘隐藏,否则就不做处理.



就是这么简单,如果觉得在每个Activity中重写dispatchTouchEvent太麻烦,大佬们也可以把它放到BaseActivity里面,最后只要暴露出hideSoftByEditViewIds()方法即可.


扩展: 有时候,我们的需求可能并不是点击所有其他控件就隐藏软键盘,这时候,就需要对一部分控件过滤,考虑这样的情况,我这里也做了处理.



然后修改dispatchTouchEvent(MotionEvent ev),如下



同样使用很简单,我们只要filterViewByIds()方法,然后传入要过滤的view即可.Fragment中原理一样. 


很简单吧.本身实现这样的方式很多种,这里只是一种方式,如果有大佬觉得我没讲述清楚的,可以看具体代码 

https://github.com/zybieku/SoftKeyboardUtil


3

附加


这里附加一些用到的方法,知道的大佬可以略过


1.软键盘的操作方法,大家都知道,参数大同小异,比如下面一种:



2.软键盘弹出时会覆盖页面内容 


在Manifest中设置android:windowSoftInputMode属性即可,如下代码,具体适用,大佬们可自行百度android:windowSoftInputMode.



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多