欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

沉浸式主题下软键盘问题

程序员文章站 2023-08-12 11:28:32
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/150 沉浸式主题下软键盘问题 项目中,对沉浸式的处理用的是https://github.com/gyf-dev/ImmersionBar 这个开源项目,项目还 ......

版权声明:本文为xing_star原创文章,转载请注明出处!

本文同步自

沉浸式主题下软键盘问题

项目中,对沉浸式的处理用的是https://github.com/gyf-dev/immersionbar 这个开源项目,项目还算可以的,处理了不少疑难杂症。刚好这几天碰到了这个问题,所以这里做个简单的总结。

我们的登录页面就是个沉浸式的主题,布局中有两个edittext。对于屏幕比较窄的手机,最下面的edittext会被软键盘给遮住,这样体验太差,只能想办法解决了。

immersionbar对软键盘这块有处理,理解它的用法,按照它的api操作,可以解决问题。

immersionbar上几个很常见的问题 https://github.com/gyf-dev/immersionbar/issues/288 https://github.com/gyf-dev/immersionbar/issues/79 这两个问题中,设置keyboardenable(true)后,底部的控件会被顶上去,这个应该是由于immersionbar做的处理,是它的锅,对于这种,我们可以获取到底部的控件,在软键盘弹起的时候,将bottomlayout设置为view.gone,收拢的时候,恢复bottomlayout的显示。

解决方案

简易的代码为:

immersionbar.with(this).keyboardenable(true).setonkeyboardlistener((ispopup, keyboardheight) -> {
if (ispopup) {
bottomlayout.setvisibility(view.gone);
} else {
bottomlayout.setvisibility(view.visible);
}
}).statusbardarkfont(true).titlebar(r.id.tv_status).init();

 

keyboardenable(true) 这个方法设置了当前activity软键盘弹出的模式,默认是adjustresize。

那么单纯这种就可行么,可能不一定可行,这个就需要结合自己的页面布局来看了。

如果没有使用scrollview作为跟节点容器,那么当软键盘弹起的时候,为了避免软键盘遮住edittext,可以将edittext等上面的一些控件给隐藏起来,或者是修改在上面的view的padding或者是margin。这样可以解决问题。
代码可以是这样子的。

immersionbar.with(this).keyboardenable(true).setonkeyboardlistener((ispopup, keyboardheight) -> {
if (ispopup) {
viewgroup.marginlayoutparams layoutparams = (viewgroup.marginlayoutparams) mtvstatus.getlayoutparams();
layoutparams.topmargin = displayutils.dip2px(20);
mtvstatus.setlayoutparams(layoutparams);
bottomlayout.setvisibility(view.gone);
} else {
viewgroup.marginlayoutparams layoutparams = (viewgroup.marginlayoutparams) mtvstatus.getlayoutparams();
layoutparams.topmargin = displayutils.dip2px(50);
mtvstatus.setlayoutparams(layoutparams);
bottomlayout.setvisibility(view.visible);
}
}).statusbardarkfont(true).titlebar(r.id.tv_status).init();

 

到此问题解决, 用immersionbar的api处理软键盘问题还是很方便的。