当前位置: 首页 > 知识库问答 >
问题:

Cordova Ionic Keyboard插件在“Init”上完全禁用

孔睿
2023-03-14

我有以下问题,我需要完全禁用本机键盘。键盘应该只在我调用show()时显示,在我调用close()函数时隐藏(这将出现在用户切换键盘的按钮上)。需要完全禁用显示单击字段和焦点的键盘。

在Stackoverflow上,我发现了以下内容:InputMethodManager im=(InputMethodManager)getSystemService(Context.INPUT\u METHOD\u SERVICE);感应电动机。hideSoftInputFromWindow(editText.getWindowToken(),0);

所以我的想法是在"Init"(IonicK中的第52行eyboard.java)我需要改变它。

if ("init".equals(action)) {
            cordova.getThreadPool().execute(new Runnable() {
                public void run() {

                  //new Logic on init
                  View v = cordova.getActivity().getCurrentFocus();
            ((InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);

              DisplayMetrics dm = new DisplayMetrics();
                cordova.getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
                final float density = dm.density;

                //http://stackoverflow.com/a/4737265/1091751 detect if keyboard is showing
                final View rootView = cordova.getActivity().getWindow().getDecorView().findViewById(android.R.id.content).getRootView();
                OnGlobalLayoutListener list = new OnGlobalLayoutListener() {
                    int previousHeightDiff = 0;
                    @Override
                    public void onGlobalLayout() {
                        Rect r = new Rect();
                        //r will be populated with the coordinates of your view that area still visible.
                        rootView.getWindowVisibleDisplayFrame(r);

                        PluginResult result;

                        int heightDiff = rootView.getRootView().getHeight() - r.bottom;
                        int pixelHeightDiff = (int)(heightDiff / density);
                        if (pixelHeightDiff > 100 && pixelHeightDiff != previousHeightDiff) { // if more than 100 pixels, its probably a keyboard...
                            String msg = "S" + Integer.toString(pixelHeightDiff);
                            result = new PluginResult(PluginResult.Status.OK, msg);
                            result.setKeepCallback(true);
                            callbackContext.sendPluginResult(result);
                        }
                        else if ( pixelHeightDiff != previousHeightDiff && ( previousHeightDiff - pixelHeightDiff ) > 100 ){
                            String msg = "H";
                            result = new PluginResult(PluginResult.Status.OK, msg);
                            result.setKeepCallback(true);
                            callbackContext.sendPluginResult(result);
                        }
                        previousHeightDiff = pixelHeightDiff;
                     }
                };

                rootView.getViewTreeObserver().addOnGlobalLayoutListener(list);


                PluginResult dataResult = new PluginResult(PluginResult.Status.OK);
                dataResult.setKeepCallback(true);
                callbackContext.sendPluginResult(dataResult);
            }
        });
        return true;
    }
    return false;  // Returning false results in a "MethodNotFound" error.
}

可悲的是,这根本不起作用。。。

我想我也必须更改关闭/显示功能,但我不确定正确的代码是什么,我不知道这个更改是否会影响其他键盘行为。(但我基本上不需要键盘就能集中注意力)

我还发现了这个Cordova插件

这看起来很有希望,但我决定在Ionic键盘插件中改变这一点,因为我在Windows中也需要同样的行为。如果有人能帮我,我很高兴。

问候克里斯托弗

共有1个答案

艾嘉石
2023-03-14

这可以通过禁用所有输入,禁用ng disabled,然后显示带有Ionic键盘插件的键盘来实现。

如果您不希望输入在禁用时以不同的方式显示,您可以使用:禁用选择器使用CSS覆盖此样式。

<input ng-disabled="hideKeyboard">
hideKeyboard = true;
<input ng-disabled="hideKeyboard">
function showKeyboard(){
  hideKeyboard = false;
  cordova.plugins.Keyboard.show();
}
 类似资料:
  • 我们正在为老年人开发一个启动应用程序,它有一个非常简单的用户界面,我们不想显示状态栏或通知抽屉。 现在,我试图禁用状态栏,但当我从屏幕上方向下拉时,它似乎重新出现。如果我第二次下拉通知抽屉被打开。有没有办法完全禁用状态栏? 我查看了以下链接上的文档,但我认为没有解决方案。在API级别16中,我们能够完全禁用它,但在API级别19中无法禁用。https://developer.android.com

  • 问题内容: 我正在测试一些针对强大压力的JSON API。然而,在某一时刻,响应时间趋于平稳的“趋势”。它增加到一个很高的点,然后下降到一个永不改变的响应时间。 我尝试取消所有两个JMeter缓存管理器选项,并将最大缓存大小设置为1。还添加了一个HTTP标头,该标头在Cache-Control上的最大寿命为零。 如何完全禁用JMeter中的缓存? 注意 : 我搜索了相关文章:但是,出现的是将JMe

  • 如CORS中所述,preflight请求由于标准头而失败,如果您将请求发送到endpoint,并设置了和头,那么它们将被Spring框架截获,并且您的方法不会得到执行。接受的解决方案是使用注释来阻止Spring返回。但是,我正在使用Swagger Codegen生成API代码,所以我只想禁用它,并手动实现我的响应。 那么你能在Spring禁用CORS拦截吗?

  • 我有一个服务可以把不必要的信息记录到journald上。这个能完全关掉吗? 我试着用log4j完成它。属于该服务但没有帮助的属性

  • 我正在为用户编写一个选择国家的过程。我有一个edittext链接到适配器,显示所有可用选项。 在我的清单中,我将活动设置为 android: windowSoftInputMode="stateAlwaysHidden" 我需要完全禁用软键盘。 除了一种情况外,它工作正常。如果用户长时间点击/按下编辑文本,键盘就会弹出。 有没有办法通过使用代码或在清单中永久禁用特定活动中的键盘? 我的代码: 我的

  • 修改f(selector) 里的判断,新增domReady 我们知道在jQuery中还有一种选择器写法 $(function() { }); 在dom加载完毕后马上就执行,这样的方法会比onload更快,所以domReady对于我们来说一定是必不可少的 我们在init方法中要新增以下判断 if(!selector) { return this; } if (typeof selector =