uni-app 无法隐藏 app 软键盘 注意是 app

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 无法隐藏 app 软键盘 注意是 app

操作步骤:

  • 无法隐藏 app 软键盘 你试试你们 【editor组件示例】App端的 软键盘会闪一下

预期结果:

  • 可以自定义app软键盘的显示

实际结果:

  • 没啥用你们的官方api

bug描述:

  • App不支持默认隐藏手机自带的键盘, 无法自定义键盘, 相当于有任何与键盘绑定的操作都无法实现
    包括你们官方的【app组件示例】也是同样存在一样的问题,从2020年到现在一直没有修复
信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 10.0.22631
HBuilderX类型 正式
HBuilderX版本 4.24
手机系统 Android
手机系统版本 Android 15
手机厂商 华为
手机机型 任意机型都是
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

2 回复

uni.hideKeyboard()这个不管用吗?我就用的这个安卓ios都行啊


针对你提到的 uni-app 在 App 环境下无法隐藏软键盘的问题,这通常涉及到页面元素焦点管理、输入框处理或者系统级的键盘控制。在 uni-app 中,由于它支持多端开发(包括小程序、H5 和 App),一些解决方案可能在不同端表现不同。以下是一些在 App 端隐藏软键盘的常用方法,主要通过原生插件或自定义组件来实现。

方法一:使用原生插件(推荐)

uni-app 支持使用原生插件来扩展功能。你可以编写一个原生插件来控制键盘的显示和隐藏。以下是一个简单的原生插件示例(以 Android 为例):

1. 创建原生插件

native-plugins 目录下创建一个新的插件目录,比如 KeyboardManager,然后在其中创建必要的文件,如 KeyboardManagerPlugin.java

// KeyboardManagerPlugin.java
package com.example.nativeplugins;

import android.app.Activity;
import android.inputmethodservice.InputMethodManager;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;

public class KeyboardManagerPlugin extends UniModule {
    public void hideKeyboard(UniJSCallback callback) {
        Activity activity = getCurrentPage().getActivity();
        View view = activity.getCurrentFocus();
        if (view != null) {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        }
        callback.invoke();
    }
}

2. 在 manifest.json 中注册插件

"nativePlugins": {
    "KeyboardManager": {
        "package": "com.example.nativeplugins.KeyboardManagerPlugin",
        "methods": ["hideKeyboard"]
    }
}

3. 在页面中使用插件

// pages/index/index.vue
export default {
    methods: {
        hideKeyboard() {
            if (window.plus && plus.nativeObj) {
                plus.nativeObj.invoke('KeyboardManager', 'hideKeyboard', (result) => {
                    console.log('Keyboard hidden');
                });
            }
        }
    }
}

方法二:使用自定义组件和事件处理

在某些情况下,你可能可以通过监听输入框的 blur 事件或自定义组件来尝试隐藏键盘,但这通常依赖于输入框失去焦点。如果直接隐藏键盘的需求较为特殊,推荐使用原生插件的方法。

总结

由于 uni-app 的跨平台特性,直接在框架层隐藏 App 端的软键盘可能并不总是有效。使用原生插件是一种更为可靠的方法,它可以直接与底层操作系统交互,实现键盘的显示和隐藏。上述代码提供了一个基本的框架,你可以根据需要进行扩展和优化。

回到顶部