原
版权声明:本文为博主原创文章,未经博主允许不得转载。	https://blog.csdn.net/u012764110/article/details/49150747
1、打开Activity时先不弹出键盘
解决方案:
在AndroidManifest.xml中设置Activity与键盘的交互模式,即android:windowSoftInput属性,它能影响两个地方:
1、产生焦点时,软键盘是否隐藏;
2、是否减少活动主窗口大小以便腾出空间放软键盘
具体的一些属性:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
android:windowSoftInputMode="adjustPan"键盘就会覆盖屏幕
android:windowSoftInputMode="stateVisible|adjustResize" 屏幕整体上移
2、点击输入框以外的地方隐藏软件键盘
解决方案:参考:http://blog.csdn.net/mad1989/article/details/25069821
实现一个通用的BaseActivity,在里面对点击事件进行处理,判断是否点击到输入框,如果是则显示软键盘,否则就隐藏
其中用到的一个知识点就是事件分发机制,原理流程如下:
(1)dispatchTouchEvent:
此方法一般用于初步处理事件,因为动作是由此分发,所以通常会调用
super.dispatchTouchEvent。这样就会继续调用onInterceptTouchEvent,再由onInterceptTouchEvent决定事件流向。
(2)onInterceptTouchEvent:
若返回值为True事件会传递到自己的onTouchEvent();
若返回值为False传递到下一个view的dispatchTouchEvent();
(3)onTouchEvent():
若返回值为True,事件由自己处理消耗,后续动作序列让其处理;
若返回值为False,自己不消耗事件了,向上返回让其他的父view的onTouchEvent接受处理;
在此处,需要重写dispatchTouchEvent里面的方法。
实现:只有在MainActivity中写一个EditText就能测试点击内部和外部键盘是否显示了。