防止键盘关闭

4
我在实现过程中遇到了一些困难。我正在构建我的第一个Hello World! Android (cordova)应用程序,需要始终显示键盘并避免隐藏,例如当用户按下后退按钮或其他输入时。
为什么?基本上我在HTML中没有任何输入元素来触发聚焦和显示键盘,这有点像“终端仿真器”,用户执行某些命令。
键盘根本没有显示,所以我添加了以下内容:

安装Ionic键盘插件


cordova plugin add https://github.com/driftyco/ionic-plugins-keyboard.git

在config.xml中添加了一个权限

 <feature name="Keyboard">
    <param name="android-package" value="com.ionic.keyboard.IonicKeyboard" />
    <param name="onload" value="true" />
</feature>

在我的应用程序模块中,以下是相关代码行:

var myApp = angular.module('myApp', ['ionic']);

myApp.run(function($ionicPlatform) {
    $ionicPlatform.ready(function() {

        if(window.cordova && window.cordova.plugins.Keyboard) {
            window.cordova.plugins.Keyboard.show(); // Show Keyboard on startup

// and here Trigger a show keyboard when hidden
            window.addEventListener('native.hidekeyboard', keyboardHideHandler); 

            function keyboardHideHandler(e){
                window.cordova.plugins.Keyboard.show();
            }

        }
    });
});

现在,上面的实现是可行的,但我认为这种处理方式并不优雅,而且我不喜欢键盘关闭然后再次弹出的感觉。
  • 除了Ionic键盘插件之外,是否有其他替代方法可以配置我的Android应用程序始终显示键盘?
  • 这是使用Cordova/Ionic框架的正确方式吗?
希望我走在正确的轨道上。任何提示将不胜感激。
谢谢 截图 enter image description here

为什么在Android设备中会出现“ios-package”。请查看config.xml文件。 - Mohammed Imran N
谢谢指出这个问题,Mohammad。已经进行了更正。不过,调用Keyboard.show();的方式都可以工作。 - Awena
2个回答

5

编辑:我认为标准方法在这里:https://dev59.com/pnI_5IYBdhLWcg3wJPdu#1510005。 然而,这并不能阻止后退按钮关闭它,你可以尝试在platforms/android的Cordova Android文件中编辑以下方法来覆盖(取自https://dev59.com/Zmw15IYBdhLWcg3wfr9y#6571093):

@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) {
        InputMethodManager manager = (InputMethodManager) this.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        manager.toggleSoftInput(0, InputMethodManager.SHOW_FORCED);
    }
    return false;
}

我尚未对此进行测试,但是如果您添加一个隐藏的输入框,并在应用程序加载时首先将其聚焦,然后在失去焦点时不断地重新聚焦它会怎么样呢?我不确定这是否与明确调用keyboard.show()没有区别,但它可能会防止键盘打开/关闭时的抖动。

可以这样做:

<input constant-focus id="hiddenFocus" type="hidden">

然后

document.getElementById('hiddenFocus').focus()

然后不断地重新聚焦它以保持键盘弹出: // HTML标签 = constant-focus

 .directive('constantFocus', function(){
      return {
        restrict: 'A',
        link: function(scope, element, attrs){

          element[0].addEventListener('focusout', function(e){
            element[0].focus();
          });
        }
      };
    })

你好,Tim,看起来我们同时发布了 :) 我现在会尝试一下。你觉得以下内容怎么样? - Awena
输入法对我的情况不起作用,这可能与我正在使用的jquery终端插件有关。你的答案对我来说似乎很合理,这是我在这里许多帖子中发现的相同建议... 我想我的最后一招将是覆盖cordova.. 谢谢Tim! - Awena
1
祝你好运!键盘可能会有些难缠,请如果成功了及时回复 :) - user1234

0

嗯,我想我想到了另一种方式,但还不确定这是否是应该处理的方式。

在“点击”上添加事件监听器

myApp.directive('detectGestures', function ($ionicGesture) {
  return {
    restrict: 'A',
    link: function (scope, elem, attrs) {
        var gestureType = attrs.gestureType;
        switch (gestureType) {
            case 'doubletap':
                $ionicGesture.on('doubletap', scope.reportEvent, elem);
                break;
    }}}
});

然后在我的控制器中,如果键盘可见则关闭,否则显示

$scope.reportEvent = function (event) {
      if (event.type == 'doubletap') {
          $timeout(function () {
              if (window.cordova && window.cordova.plugins.Keyboard) {
                  if(cordova.plugins.Keyboard.isVisible){
                      window.cordova.plugins.Keyboard.close();
                  } else {
                      window.cordova.plugins.Keyboard.show();
                  }

              }
           }, 500);
         }
      };

请告诉我您的想法。
谢谢!


嗯,我猜我认为主要问题是键盘开始关闭然后重新打开,如果是这样,我不确定这个修复是否有效? - user1234

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接