最近做个登录页,背景不是纯色,而是一张图片,然后输入框靠近下方,点击的时候,页面会全部被推上去,这咋能行捏?于是乎设置 android:windowSoftInputMode 属性。设置一顿,还是不行,然后又用ScrollView嵌套等等,最后要么是输入框不动,背景被推上去;要么是背景跟输入框都推上去;要么就是输入框被遮挡,反正是各种不符合预期。
谷歌了半小时,也没找到个完美的解决办法。
于是乎考虑了一下,弹出软键盘,View的大小变了,那DecorView变不变呢?
没有验证,直接很暴力的在 onCreate时
getWindow().getDecorView().setBackgroundResource(R.mipmap.背景);
然后去掉xml里的背景,输入框该用ScrollView嵌套的就继续嵌套。
Activity的
android:windowSoftInputMode="adjustResize|stateHidden" 让Activity可以自由压缩,背景是设置在DecorView上了,这个不会压缩
至此,背景就不会被软键盘弹出而压缩了,输入框也不会被遮挡,在ScrollView里可以自由移动。
我的问题就这么解决了~
只是其他版本有没有效果暂时不清楚,Android 8.0测试没问题,不好用的可以留言反馈,防止误导他人。
核心就一句话,没啥代码可放。也不知道兼容性如何~也不知道会有啥副作用~
借用别人的图说一下,需求就是这样子的:
左边是未弹出软键盘,中间是默认情况下弹出软键盘(不符合预期),右边才是想要的正常效果。
参考了若干资料:
https://blog.csdn.net/sonwfly/article/details/68945118 就是上面图片的来源,若干个输入框的时候貌似有问题。
https://blog.csdn.net/harryweasley/article/details/50266749 这个我测试的时候乱跳,就没详细研究。
https://blog.csdn.net/learningcoding/article/details/70755743 这个感觉好麻烦,还得重写控件,而且感觉阻止改变大小有点奇怪。。