引言
输入框与键盘问题一直都是说小不小说大不大的问题,修复起来也是特别的操蛋。
方案
今天就来讲下输入框与键盘不适应的几种解决方案:
输入框获取焦点后,键盘直接遮挡了界面,输入框并没有做相应的调整的情况
如何解决呢?
通常可以直接在AndroidManifest中使用
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
或者在代码中直接使用:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
windowSoftInputMode各值的含义:
【A】stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
【B】stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
【C】stateHidden:用户选择activity时,软键盘总是被隐藏
【D】stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
【E】stateVisible:软键盘通常是可见的
【F】stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
【G】adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
【H】adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
【I】adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
一般情况是可以得到解决的,当是就是有那么不顺的时候,无论怎么尝试以上的方法都无法做到想要的效果。
无奈,只能启用必杀技了:AndroidBug5497Workaround,确实解决了这个问题,但是新问题也随之出现。
使用AndroidBug5497Workaround,只需AndroidBug5497Workaround.assistActivity(this)
使用AndroidBug5497Workaround也不是盲目的使用,网上有人给出填坑后的版本:
![](https://img.haomeiwen.com/i4997536/327b6dc1fd39f135.png)
就是使用沉浸式状态栏后出现的坑。
既然沉浸式状态栏有坑,那么虚拟按键是不是也有同样的坑呢,新问题就是AndroidBug5497Workaround并没有适配虚拟按键,导致整体界面沉浸在虚拟按键之下。
![](https://img.haomeiwen.com/i4997536/cab0af800a4c9b5c.png)
解决的方法:
看到AndroidBug5497Workaround源码,就知道frameLayoutParams.height设置完后,
mChildOfContent.requestLayout();就会重新调整界面,所以我们只需要修改frameLayoutParams.height即可:
![](https://img.haomeiwen.com/i4997536/ffcd9d7f307db82b.png)
至此,这个坑就填完了。
网友评论