解决软键盘弹出,同时把底部按钮顶上去问题

博客主要围绕软键盘弹出时把底部按钮顶上去的问题展开。尝试了在Manifest中添加配置、在Activity中设置软输入模式等方法,但前者因沉浸式标题及布局配置不起作用,后者会使整体布局上移且无法滚动。还提出判断键盘弹出隐藏布局按钮,消失后再显示的方案,并给出参考网址。

前言

问题:软键盘弹出时,会把底部按钮顶上去
在这里插入图片描述

处理方法

尝试方案:
1、 在Manifest中添加
android:windowSoftInputMode=“adjustPan|stateHidden”
该方法不起作用,因为我标题用的是沉浸式ImmersionBar,我在布局里面配置了
android:fitsSystemWindows=“true”,所以不起作用
2、在Activity中添加
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
该方法有问题,设置后会把整体布局顶上去,同时布局不能滚动
3、判断键盘弹出,把顶上去的布局按钮隐藏,键盘消失,再把底部布局显示出来
参考网址:https://blog.youkuaiyun.com/LSLSD/article/details/93094413
在这里插入图片描述

### Vue移动端安卓软键盘弹出底部按钮被顶起的解决方案 在Vue移动端开发中,安卓设备上软键盘弹出时,底部按钮(通常使用`position: fixed`定位)会被顶起的问题较为常见。这是由于安卓浏览器在软键盘弹出时会改变可视窗口的高度,导致页面布局重新计算[^2]。 #### 问题分析 当用户点击输入框时,软键盘弹出会触发`window.onresize`事件,此时页面的可视高度发生变化。如果底部按钮使用了`position: fixed`,其位置将基于新的可视高度进行调整,从而导致被顶起的现象[^3]。 #### 解决方案 以下是几种常见的解决方法: 1. **通过监听窗口大小变化动态隐藏底部按钮** 可以通过监听页面高度的变化来判断软键盘是否弹出,并根据情况动态显示或隐藏底部按钮。 ```javascript data() { return { docmHeight: window.innerHeight, // 默认屏幕高度 showHeight: window.innerHeight, // 实时屏幕高度 hideshow: true // 显示或隐藏底部按钮 }; }, mounted() { // 监听窗口大小变化 window.onresize = () => { this.showHeight = window.innerHeight; }; }, watch: { showHeight(newValue) { if (this.docmHeight > newValue) { this.hideshow = false; // 软键盘弹出时隐藏底部按钮 } else { this.hideshow = true; // 软键盘收起时显示底部按钮 } } } ``` 在模板中使用`v-show`控制底部按钮的显示与隐藏: ```html <div class="footer" v-show="hideshow"> <button>确认操作</button> </div> ``` 此方法简单有效,适用于大多数场景[^4]。 2. **修改底部按钮的定位方式** 将底部按钮的定位从`fixed`改为`absolute`,并将其父容器设置为`relative`定位。这样可以避免软键盘弹出时对底部按钮的影响。 ```html <div class="container"> <div class="footer"> <button>确认操作</button> </div> </div> ``` ```css .container { position: relative; height: 100vh; overflow: hidden; } .footer { position: absolute; bottom: 0; left: 0; right: 0; } ``` 此方法适用于页面内容不会超出屏幕高度的情况[^5]。 3. **使用CSS媒体查询适配软键盘** 通过检测软键盘弹出时的窗口高度变化,结合CSS媒体查询实现适配。 ```css @media (max-height: 600px) { /* 假设软键盘弹出后窗口高度小于600px */ .footer { display: none; } } ``` 需要注意的是,不同设备的窗口高度变化可能不同,因此需要根据实际情况调整媒体查询条件。 4. **jQuery实现动态调整** 如果项目中使用了jQuery,可以通过监听页面高度变化动态调整底部按钮的定位。 ```javascript var winHeight = $(window).height(); // 获取当前页面高度 $(window).resize(function () { var thisHeight = $(this).height(); if (winHeight - thisHeight > 140) { // 判断软键盘是否弹出 $('.footer').css('position', 'static'); // 改变定位方式 } else { $('.footer').css({ 'position': 'fixed', 'bottom': '0' }); } }); ``` 此方法适合不使用Vue的项目或需要兼容非Vue组件的场景[^4]。 #### 注意事项 - 不同安卓设备和浏览器的行为可能存在差异,建议在开发过程中多测试几款主流设备。 - iOS设备通常不会出现类似问题,但需要注意部分iOS机型中输入框获取焦点和键盘事件的支持较差[^1]。 ```python # 示例代码仅用于说明,实际开发中需根据具体需求调整 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值