首页 文章

防止键盘关闭

提问于
浏览
3

我正在努力解决这个问题 . 我正在构建我的第一个Hello World! android(cordova)应用程序,需要键盘始终显示并避免隐藏它,就像用户单击后退按钮或任何其他输入时一样 .
为什么?基本上我没有't have any input element in my HTML to trigger a focus & show the keyboard, it'那种用户执行某些命令的地方 .
键盘根本没有显示所以我去了,我添加了以下内容:

Installed Ionic Keyboard plugin

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

Added a Permission to config.xml

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

在我的App模块中,以下行:

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框架的正确方法吗?

希望我走在正确的轨道上 . 任何提示都将受到赞赏 .

谢谢

Screenshots

enter image description here

2 回答

  • 5

    编辑:我认为这样做的标准方法是:https://stackoverflow.com/a/1510005/1091751 . 当按下后退按钮时,这不会阻止它关闭,但是,您可以尝试在 platforms/android 中编辑实际的Cordova Android文件以覆盖以下方法(取自https://stackoverflow.com/a/6571093/1091751):

    @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 tag = constant-focus

    .directive('constantFocus', function(){
          return {
            restrict: 'A',
            link: function(scope, element, attrs){
    
              element[0].addEventListener('focusout', function(e){
                element[0].focus();
              });
            }
          };
        })
    
  • 0

    好吧,我想我想出了一个不同的方式,仍然不确定这是否应该如何处理 .

    在Taps上添加一个事件监听器

    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);
             }
          };
    

    让我知道你的想法 .
    谢谢!

相关问题