Android 自定义键盘输入内容监听
2017-05-18 09:28
309 查看
文章内容结构按照STAR法则展开的:
situation:
为何要监听输入内容? 一般正常的监听键盘输入内容,都是用Editext控件来实现用户的输入内容显示。但是如果密码输入框设计成如下:
都是类似的,需要对每个输入的字符或数字准确监听并放入到固定位置了,这个是Editext做不到的,它只负责把输入的内容依次显示在输入框内的横线上,不能有这么多种显示样式。
Task:
1、获取到键盘输入内容
这个就是本文要讲的
2、在监听到输入内容之后,立马绘制显示UI内容
具体如何绘制比较简单,本文就不过多展开
Action: 如何监听用户输入了内容
1、间接方式(自己最初还真是这样做的)
既然Editext实现了监听键盘输入,那何必不直接使用呢。那剩下的问题就是密码ui显示的问题,上午也讲了直接用Editext显示那么的不优雅,那就仅仅使用监听输入啊,显示单独绘制不就好了么。Editext.addTextChangedListener来监听每个字符输入。
当然这样就是偷懒了,有啥好讲的呢
2、最直接的办法(自己用来仅仅当简单的数字输入)
直接实现输入键盘键盘,提供用户自己实现的键盘,直接监听用户的操作,这不是很简单么。具体就是点击的时候,从手机底部弹出自己实现输入键盘界面,为了逼真些,也要支持横竖切换,就需要动态布局按键了。所以当可以输入内容过多的话,实现起来也烦。
这就不多展开了,也不是本文的重点,下面重点来了。
3、直接监听系统输入法的输入内容值(本文重点,请不要怪我写了那么的废话,才到重点,不要打我)
我们知道点击屏幕事件TOUCHEVENT事件,系统会给每个view分发touch事件,那么按钮键盘点击事件也有啊,KEYEVENT,这里涉及到了keyEvent事件的分发,不展开,可以参考http://www.cnblogs.com/xiaoweiz/p/3803301.html。从本文中也可以看到,keyevent事件会传递到view的实现的keyEvent.CallBack接口中。回过头来看下Editext源码是如何实现对键盘内容的输入显示。发现实现全部在父类TextView中,直接定位其对onkeyDownd的实现如下:
在定位到doKeyDown方法,可以看到对keyEvent事件内进行解析分类:有back,enter,tab事件
那输入内容呢,继续看:
可以看到mKeyListener.onKeyOther(this, (Editable) mText, otherEvent);那这个又是那个实现了这个接口呢,定位发现在TextView初始化时候就进行赋值了:
随便点开一个实现类TextKeyListener.getInstance()或者DialerKeyListener.getInstance(),可以看到输入的内容的解析以及最终显示,不过多展开。
总之可以发现源头在KEYevent.callBack的实现,且View实现了这个接口,故只要自定义这个一个view即可,然后在onkeyDown里面解析输入内容就可以实现了内容的监听了。或者直接在onkeyListener这个接口进行拦截
在接口没有实现之后,event.dispatch在调用到onkeyDown...
在KeyListener的实例子类中解析键盘值并输入,其中KeyEvent中keycode解析:
这样就可以完成对输入的监听了。
如何点击弹出输入法,其实都可以模拟系统的实现:
在textView的onTouchEvent中有发现调起输入法
故同理。
在失去焦点时隐藏软键盘,重写onWindowFocusChanged方法关闭输入法。
最后模拟下EDITEXT功能有恢复数据能力:
重写onSaveInstanceState方法和onRestoreInstanceState对状态进行保存和恢复
好了,这么多了。刚写文章cdsn编辑还不怎么会搞,格式有点乱,带来阅读困扰,敬请见谅哦!
situation:
为何要监听输入内容? 一般正常的监听键盘输入内容,都是用Editext控件来实现用户的输入内容显示。但是如果密码输入框设计成如下:
都是类似的,需要对每个输入的字符或数字准确监听并放入到固定位置了,这个是Editext做不到的,它只负责把输入的内容依次显示在输入框内的横线上,不能有这么多种显示样式。
Task:
1、获取到键盘输入内容
这个就是本文要讲的
2、在监听到输入内容之后,立马绘制显示UI内容
具体如何绘制比较简单,本文就不过多展开
Action: 如何监听用户输入了内容
1、间接方式(自己最初还真是这样做的)
既然Editext实现了监听键盘输入,那何必不直接使用呢。那剩下的问题就是密码ui显示的问题,上午也讲了直接用Editext显示那么的不优雅,那就仅仅使用监听输入啊,显示单独绘制不就好了么。Editext.addTextChangedListener来监听每个字符输入。
当然这样就是偷懒了,有啥好讲的呢
2、最直接的办法(自己用来仅仅当简单的数字输入)
直接实现输入键盘键盘,提供用户自己实现的键盘,直接监听用户的操作,这不是很简单么。具体就是点击的时候,从手机底部弹出自己实现输入键盘界面,为了逼真些,也要支持横竖切换,就需要动态布局按键了。所以当可以输入内容过多的话,实现起来也烦。
这就不多展开了,也不是本文的重点,下面重点来了。
3、直接监听系统输入法的输入内容值(本文重点,请不要怪我写了那么的废话,才到重点,不要打我)
我们知道点击屏幕事件TOUCHEVENT事件,系统会给每个view分发touch事件,那么按钮键盘点击事件也有啊,KEYEVENT,这里涉及到了keyEvent事件的分发,不展开,可以参考http://www.cnblogs.com/xiaoweiz/p/3803301.html。从本文中也可以看到,keyevent事件会传递到view的实现的keyEvent.CallBack接口中。回过头来看下Editext源码是如何实现对键盘内容的输入显示。发现实现全部在父类TextView中,直接定位其对onkeyDownd的实现如下:
在定位到doKeyDown方法,可以看到对keyEvent事件内进行解析分类:有back,enter,tab事件
那输入内容呢,继续看:
可以看到mKeyListener.onKeyOther(this, (Editable) mText, otherEvent);那这个又是那个实现了这个接口呢,定位发现在TextView初始化时候就进行赋值了:
随便点开一个实现类TextKeyListener.getInstance()或者DialerKeyListener.getInstance(),可以看到输入的内容的解析以及最终显示,不过多展开。
总之可以发现源头在KEYevent.callBack的实现,且View实现了这个接口,故只要自定义这个一个view即可,然后在onkeyDown里面解析输入内容就可以实现了内容的监听了。或者直接在onkeyListener这个接口进行拦截
在接口没有实现之后,event.dispatch在调用到onkeyDown...
在KeyListener的实例子类中解析键盘值并输入,其中KeyEvent中keycode解析:
这样就可以完成对输入的监听了。
如何点击弹出输入法,其实都可以模拟系统的实现:
在textView的onTouchEvent中有发现调起输入法
故同理。
在失去焦点时隐藏软键盘,重写onWindowFocusChanged方法关闭输入法。
最后模拟下EDITEXT功能有恢复数据能力:
重写onSaveInstanceState方法和onRestoreInstanceState对状态进行保存和恢复
好了,这么多了。刚写文章cdsn编辑还不怎么会搞,格式有点乱,带来阅读困扰,敬请见谅哦!
相关文章推荐
- Android自定义EditText,实现分割输入内容效果
- 【android】EditText监听,根据输入内容查询数据并动态更新ListView
- Android自定义View接收输入法输入的内容
- Android 自定义view接收输入法输入的内容并显示在view上
- android 自定义纯数字键盘输入
- Android 自定义的数字键盘 支持随意拖动 和稳定的字符输入的控件
- android-- 简单自定义安全键盘(只能输入字母,数字,部分符号)
- Android 如何监听App的输入了那些内容
- Android搜索框输入内容点击键盘的搜索按钮进行搜索
- android自定义键盘 限制车牌号码输入
- WPF 自定义TextBox,可控制键盘输入内容
- 股票输入软键盘,android初探自定义软键盘
- Android安全输入设计与思考,android设计思考 为什么使用安全键盘? 安全的输入 各大公司的安全键盘设计 开始自定义安全键盘 安全键盘还需要注意的
- Android之输入内容监听回车键【Editor】
- [Android调试基础四]键盘输入调试(输入监听与模拟发送)
- Android之输入内容监听回车键【Editor】
- android 键盘监听EditView时,自定义键盘的确定按钮样式
- Android学习之自定义TextWatcher来监听文本最大输入字数
- android 自定义View在弹出的软键盘之上,以及测量软键盘高度和监听软键盘状态
- Android 强行夺取EditText系统键盘输入改为自定义安全键盘输入