uni-app Android平台软键盘英文状态下弹起后自动关闭问题

uni-app Android平台软键盘英文状态下弹起后自动关闭问题

开发环境 版本号 项目创建方式
Windows Windows10 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.1.22

手机系统:Android

手机系统版本号:Android 11

手机厂商:华为

手机机型:荣耀V30 pro

页面类型:vue

打包方式:云端

项目创建方式:HBuilderX

### 示例代码:

```html
<template>
<view>
<view v-show="kuang">
<textarea :focus="jujiao"   [@blur](/user/blur)="textblur" v-model="message"></textarea>
<button class="cu-btn bg-red shadow" style="margin-right: 20rpx;width: 300rpx;height: 40px;box-shadow: none;" [@click](/user/click)="replynow">发布评论</button>
</view>
<view class="pingluntiao">
<view class="pinglunkuang" [@click](/user/click)="xianshikuang" >
<view class="dianjipinglun" >说说你的看法</view>
</view>
</view>
</view>
</template>  
<script>
import {
mapState,
mapMutations
} from 'vuex'
var js;
export default{
name:'articleData',
data(){
return{
kuang:false,
jujiao:false,
}
},
methods:{
xianshikuang(){
this.kuang = true;
setTimeout(() => {
this.jujiao =true;
}, 500)
},
},
}
</script>  
<style lang="scss">
[@import](/user/import) "../../wucss/neirong.css";
</style>  

操作步骤:

点击button,弹出键盘后又自动关闭

预期结果:

点击button,弹出输入框键盘正常弹起,不会自动关闭

实际结果:

点击button,弹出键盘后又自动关闭

bug描述:

不管是textarea 组件还是input组件,在focus自动获取焦点后,键盘弹出后立即关闭了,就是闪一下,华为自带输入法没有这个问题,就是第三方的:搜狗、百度输入法 全键盘 英文状态下会有这个问题。


更多关于uni-app Android平台软键盘英文状态下弹起后自动关闭问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

没有调用失焦或者收起键盘事件?如果没有的话,提供一个简单可复现的demo

更多关于uni-app Android平台软键盘英文状态下弹起后自动关闭问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


没有调用任何失焦或者收起键盘事件,附件已提供能复现该事件的UNI-APP源码
搜狗输入法版本:V10.32 ,切换为26键全英文状态,会出现键盘弹出又迅速自动收起现象。
系统版本:Magic 4.0.0
手机型号:荣耀V30 Pro
Android版本:Android 10
提供的源代码,能完全复现该事件。

这个问题是由于Android平台第三方输入法(如搜狗、百度输入法)在英文全键盘模式下,当焦点快速切换时出现的兼容性问题。

解决方案:

  1. 延迟设置焦点(已采用,但需优化): 你已使用setTimeout延迟设置焦点,但500ms可能不够。建议增加到800-1000ms:

    setTimeout(() => {
      this.jujiao = true;
    }, 800)
    
  2. 使用nextTick: 在显示文本框后使用Vue的nextTick确保DOM更新完成:

    xianshikuang(){
      this.kuang = true;
      this.$nextTick(() => {
        setTimeout(() => {
          this.jujiao = true;
        }, 300)
      })
    }
    
  3. 避免焦点冲突: 确保按钮点击事件不会触发重新渲染或焦点丢失。检查replynow方法是否执行了可能影响焦点的操作。

  4. 使用uni-app原生API: 考虑使用uni.hideKeyboard()uni.showKeyboard()手动控制键盘,但需注意时机。

  5. 输入法特定处理: 检测到第三方输入法时增加更长的延迟:

    // 可尝试检测输入法类型,针对性处理
回到顶部