[英]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();
}
}
});
});
現在,上面的實現工作,但我不認為這樣處理它是優雅的,我不喜歡鍵盤關閉然后再次彈出的感覺。
希望我走在正確的軌道上。任何提示都將受到贊賞。
謝謝
截圖
編輯:我認為這樣做的標准方法是: 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.