完美解决android软键盘挡住输入框方法,还不顶标题栏
作者:互联网
非透明状态栏下使用adjustResize和adjustPan,或是透明状态栏下使用fitsSystemWindows=true属性
在AndroidManifest.xml
对应的Activity里添加 android:windowSoftInputMode=”adjustPan”
或是android:windowSoftInputMode=”adjustResize”
属性
属性 | 注意事项 | 优缺点 | 失效情况 | 适用情况 |
---|---|---|---|---|
adjustResize(建议) | 需要界面本身可调整尺寸, 如在布局添加ScrollView,或输入控件属于RecycleView/ListView某一项 | 优点:1.不会把标题栏顶出当前布局; 2.有多项输入时,当前输入框下面的输入框可上下滑动输入 缺点:1.需要界面本身可调整尺寸; 2. 全屏时失效 | 1.Activity主窗口尺寸无法调整; 2.Activity全屏 3.android5.0以上通过style设置沉浸式状态栏模式而不设置fitSystemWindow为true | 非全屏或是非沉浸式状态栏输入界面,输入框比较多 |
adjustPan | 页面不会重新布局,当前输入框和键盘会直接将当前输入框以上界面整体向上平移,这样即使界面包含标题栏,也会被顶上去 | 优点: 使用简单,不需要界面本身可调整尺寸,不会有失效情况 缺点: 会把标题栏顶出当前布局;有多项输入时,当前输入框下面的输入框无法输入,必须收起键盘显示输入框再输入 | 无 | 有少量输入项,且输入量居界面上方 |
fitsSystemWindows | 如果多个View设置了fitsSystemWindows=”true”,只有初始的view起作用,都是从第一个设置了fitsSystemWindows的view开始计算padding | 优点:使用简单,需要沉浸式状态栏的界面,不需要自己计算padding状态栏的高度 缺点:使用有限制 | 1.View 的其他 padding 值被重新改写了 2.手机系统版本>=android 4.4 | 1.界面全屏 2.设置界面主题为沉浸式状态栏 |
-
adjustResize
失效情况:activity设置了全屏属性指Theme.Light.NotittleBar.Fullscreen
(键盘弹起时会将标题栏也推上去)或者设置了activity对应的主题中android:windowTranslucentStatus
属性,设置方式为:android:windowTranslucentStatus=true
,这时如果对应的页面上含有输入框,将会导致点击输入框时软键盘弹出后键盘覆盖输入框,导致输入框看不见。 -
fitsSystemWindows=”true”
只有初始的view起作用:如果在布局中不是最外层控件设置fitsSystemWindows=”true”
那么设置的那个控件高度会多出一个状态栏高度。若有多个view设置了,因第一个view已经消耗掉insect,其他view设置了也会被系统忽略。 -
使用
adjustPan
, 如果需要输入的项比较多时,点击输入框,当前输入项会被顶到软键盘上方,但若当前输入框下面还有输入项时,却需要先收起键盘,再点击相应的输入项才能输入。这样操作太繁琐了,对于用户体验不大好; -
adjustResize
的使用,需要界面本身可显示的窗口内容能调整,可结合scrollview或NestedScrollView
使用;
标签:界面,状态栏,标题栏,输入框,软键盘,设置,fitsSystemWindows,输入 来源: https://blog.csdn.net/weixin_41620505/article/details/121989889