Android 软键盘相关知识点梳理
先说说开发过程中遇到的几个常用的软键盘场景
场景一
屏幕存在多个输入框,点击输入框,软键盘不遮挡输入框
使用adjustPan有效,使用adjustResize无效(找出无效的原因,搜索到的结果都是说改这个)
场景二
WebView界面存在输入框,点击输入框,软键盘不遮挡输入框
场景三
点击非输入框部分,隐藏软键盘
分两步:
- 判断touch的是不是输入框View对应的区域;
- 重写Activity的dispatchTouchEvent方法,触摸的不是输入框对应View的时候,隐藏软键盘;
场景四
进入带输入框的页面,自动弹出软键盘
知识储备
软键盘控制
Android 软键盘的控制主要通过在AndroidManifest.xml文件声明activity时添加 android:windowSoftInputMode属性或者在代码中在Activity
的onCreate
函数调用setContentView
之前通过修改Window
的getWindow().setSoftInputMode(int mode)
方法来控制,代码示例如下:
AndroidManifest.xml文件中
1
2
3
4<activity android:name=".module.login.LoginActivity"
...
...
android:windowSoftInputMode="adjustPan" />代码中
1
2
3
4
5
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
}
注意:在AndroidMainfest.xml
文件中在此Activity中写入 android:windowSoftInputMode="adjustPan"
可以让界面不被弹出的键盘挤上去;
不管是通过xml文件还是通过代码,效果都是一样的,这个属性控制着软键盘和Activity交互的两种状态:
- 软键盘的状态——当活动(Activity)成为用户关注的焦点时软键盘是隐藏或显示,对应于
state
开头的属性值。 - 活动的主窗口调整——窗口获取焦点后弹出软键盘时窗口讲如何调整(是否减少活动主窗口大小以便腾出空间放软键盘,是否直接让软键盘覆盖活动窗口,对应于
adjust
开头的属性值。
参考文章: