Android 软键盘相关知识点梳理

Android 软键盘相关知识点梳理

先说说开发过程中遇到的几个常用的软键盘场景

场景一

屏幕存在多个输入框,点击输入框,软键盘不遮挡输入框

使用adjustPan有效,使用adjustResize无效(找出无效的原因,搜索到的结果都是说改这个)

场景二

WebView界面存在输入框,点击输入框,软键盘不遮挡输入框

场景三

点击非输入框部分,隐藏软键盘

分两步:

  1. 判断touch的是不是输入框View对应的区域;
  2. 重写Activity的dispatchTouchEvent方法,触摸的不是输入框对应View的时候,隐藏软键盘;

场景四

进入带输入框的页面,自动弹出软键盘

知识储备

软键盘控制

Android 软键盘的控制主要通过在AndroidManifest.xml文件声明activity时添加 android:windowSoftInputMode属性或者在代码中在ActivityonCreate函数调用setContentView之前通过修改WindowgetWindow().setSoftInputMode(int mode)方法来控制,代码示例如下:

  1. AndroidManifest.xml文件中

    1
    2
    3
    4
    <activity android:name=".module.login.LoginActivity"
    ...
    ...
    android:windowSoftInputMode="adjustPan" />
  2. 代码中

    1
    2
    3
    4
    5
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    }

注意:在AndroidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan" 可以让界面不被弹出的键盘挤上去;

不管是通过xml文件还是通过代码,效果都是一样的,这个属性控制着软键盘和Activity交互的两种状态:

  1. 软键盘的状态——当活动(Activity)成为用户关注的焦点时软键盘是隐藏或显示,对应于state开头的属性值。
  2. 活动的主窗口调整——窗口获取焦点后弹出软键盘时窗口讲如何调整(是否减少活动主窗口大小以便腾出空间放软键盘,是否直接让软键盘覆盖活动窗口,对应于adjust开头的属性值。

参考文章:

  1. 5种方法完美解决android软键盘挡住输入框方法详解