博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
沉浸式主题下软键盘问题
阅读量:5039 次
发布时间:2019-06-12

本文共 1656 字,大约阅读时间需要 5 分钟。

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

本文同步自

沉浸式主题下软键盘问题

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

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

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

ImmersionBar上几个很常见的问题   这两个问题中,设置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处理软键盘问题还是很方便的。

转载于:https://www.cnblogs.com/xing-star/p/11101278.html

你可能感兴趣的文章
多变量微积分笔记24——空间线积分
查看>>
Magento CE使用Redis的配置过程
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Mac 下的Chrome 按什么快捷键调出页面调试工具
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>