Javascript 防止键盘关闭
我在这个实现上有点困难。我正在建立我的第一个你好世界!android(cordova)应用程序,要求键盘始终显示并避免在用户单击后退按钮或任何其他输入时隐藏键盘。Javascript 防止键盘关闭,javascript,android,cordova,ionic-framework,Javascript,Android,Cordova,Ionic Framework,我在这个实现上有点困难。我正在建立我的第一个你好世界!android(cordova)应用程序,要求键盘始终显示并避免在用户单击后退按钮或任何其他输入时隐藏键盘。为什么?基本上,我的HTML中没有任何输入元素来触发焦点&显示键盘,这是一种“终端仿真器”,用户在其中执行某些命令。键盘根本没有显示,所以我去了,并添加了以下内容: 已安装的爱奥尼亚键盘插件 cordova plugin add https://github.com/driftyco/ionic-plugins-keyboard.git
为什么?基本上,我的HTML中没有任何输入元素来触发焦点&显示键盘,这是一种“终端仿真器”,用户在其中执行某些命令。
键盘根本没有显示,所以我去了,并添加了以下内容: 已安装的爱奥尼亚键盘插件
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>
现在,上面的实现可以工作了,但我认为这样处理并不优雅,我不喜欢键盘关闭后再次弹出的感觉
- 除了爱奥尼亚键盘的插件外,还有没有其他方法可以配置我的android应用程序,使其始终显示键盘?
- 这是使用Cordova/Ionic框架的正确方法吗
编辑:我认为标准的方法是在这里:。 这不会阻止它在按下Backbox按钮时关闭,但是,您可以尝试在
platforms/Android
中编辑实际的Cordova Android文件,以覆盖以下方法(取自):
我还没有测试过这一点,但是如果你添加了一个隐藏的输入,当你的应用程序加载时你会关注它,然后当它失去焦点时会不断地重新关注它呢?我不确定这与显式调用keyboard.show()有什么不同,但它可能会防止键盘打开/关闭抖动 比如:
<input constant-focus id="hiddenFocus" type="hidden">
然后不断调整焦点以保持键盘正常工作:
//HTML标记=恒定焦点
.directive('constantFocus', function(){
return {
restrict: 'A',
link: function(scope, element, attrs){
element[0].addEventListener('focusout', function(e){
element[0].focus();
});
}
};
})
嗯,我想我想出了一个不同的方法,但仍然不确定这是否应该被处理。
在点击时添加事件侦听器
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;
}}}
});
然后在我的控制器中,如果键盘可见,请关闭else显示
$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);
}
};
让我知道你的想法。谢谢 为什么要在安卓设备上安装“ios软件包”。请参阅config.xml谢谢您指出Mohammad,更正了。但是,调用Keyboard.show();was works WAY你好,蒂姆,看起来我们是同时发布的:)当然,我现在就试试。您对下面的内容有何看法?输入法不适用于我的情况,这可能与我正在使用的jquery终端插件有关。你的回答对我来说似乎很合乎逻辑,我在这里的许多帖子中都找到了同样的建议。。我想我的最后一个办法是压倒科尔多瓦。。谢谢蒂姆!祝你好运键盘可能是一个变化无常的东西,如果你有任何成功,请发回:)嗯,我想我认为主要的问题是键盘开始关闭,然后重新打开,在这种情况下,我不确定这是否解决了这个问题?
.directive('constantFocus', function(){
return {
restrict: 'A',
link: function(scope, element, attrs){
element[0].addEventListener('focusout', function(e){
element[0].focus();
});
}
};
})
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);
}
};