簡體   English   中英

防止鍵盤關閉

[英]Prevent Keyboard from closing

我對這個實現有點掙扎。 我正在構建我的第一個Hello World! android(cordova)應用程序,需要鍵盤始終顯示並避免隱藏它,就像用戶單擊后退按鈕或任何其他輸入時一樣。
為什么? 基本上我的HTML中沒有任何輸入元素來觸發焦點並顯示鍵盤,它是用戶執行某些命令的“終端模擬器”。
鍵盤根本沒有顯示所以我去了,我添加了以下內容:

安裝了Ionic Keyboard插件

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>

在我的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框架的正確方法嗎?

希望我走在正確的軌道上。任何提示都將受到贊賞。

謝謝

截圖

在此輸入圖像描述

編輯:我認為這樣做的標准方法是: 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標簽= constant-focus

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

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

好吧,我想我想出了一個不同的方式,仍然不確定這是否應該如何處理。

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

讓我知道你的想法。
謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM