如何在 apache cordova 中隐藏 SoftKeyboard android
How to hide SoftKeyboard in apache cordova android
我有一个旧的 android 应用程序是用 cordova 开发的,我不太熟悉它作为本机 java。在我的应用程序案例中,当它打开时显示一个带有用户名、密码和登录按钮的登录屏幕,我发现处理此功能的文件是 signin.js
,代码如下
Ext.define('GBMob.view.Signin',{
extend: 'Ext.form.Panel',
requires: [
'Ext.data.JsonP',
'Ext.field.Password',
'Ext.form.FieldSet',
'GBMob.view.GBHome'
],
config: {
items: [
{
xtype: 'fieldset',
title: 'User Info',
instructions: 'Enter Username/Email and Password.',
maxWidth: 550,
items: [
{
xtype: 'textfield',
name: 'username',
label: 'Username'
},
{
xtype: 'passwordfield',
name: 'password',
label: 'Password'
},
{
xtype: 'button',
text: 'Sign in',
ui: 'confirm',
padding: 2,
margin: 15,
flex: 0.3,
handler: function() {
var loadingMask = {
xtype: 'loadmask',
message: 'Signing in ...'
};
Ext.Viewport.setMasked(loadingMask);
var softkeyboard = window.cordova.plugins.SoftKeyBoard;
softkeyboard.hide();
username = SigninView.getValues().username;
password = SigninView.getValues().password;
Ext.data.JsonP.request({
url: 'https://xxxxxx.com/api/login/',
scope: this,
params: {
data: base64.encode(username.toLowerCase() + ':' + password)
},
success: function(result) {
........
........
........
console.log("Signing in with Username: " + username + " and password: " + password);
}
}
]
}]
}
});
到目前为止,代码运行良好,但问题出在用户输入 username and password
并单击 Sign in
按钮后 keyboard was not disappearing
并且由于在重定向到仪表板后一半的仪表板页面消失了(消失),我的意思是只有一半页面可见而一半页面是空白的(可能是之前的登录屏幕键盘部分正在制作仪表板半屏 invisible/blank 白色背景)。所以我决定在点击 Sign in
按钮后立即隐藏键盘,因此做了以下
- 将键盘插件搜索为
cordova plugin search keyboard
- 已将 SoftKeyboard 插件安装为
cordova plugin add org.apache.cordova.plugin.softkeyboard
- 在 signin.js 文件中添加以下两行,如上面代码
中所述
var softkeyboard = window.cordova.plugins.SoftKeyBoard;
softkeyboard.hide();
但是在添加以上两行之后,我根本无法登录,应用程序只显示登录....不断屏蔽。
那么上面添加的两行代码有什么问题,在 cordova 中单击按钮后需要做什么才能立即隐藏键盘?
有人知道如何在 cordova 中隐藏键盘吗?
在 Whosebug 的某个地方找到这个函数来隐藏 android
中的键盘
我们需要创建一个 javascript 函数,如下所示
function hideKeyboard() {
//this set timeout needed for case when hideKeyborad
//is called inside of 'onfocus' event handler
setTimeout(function() {
//creating temp field
var field = document.createElement('input');
field.setAttribute('type', 'text');
//hiding temp field from peoples eyes
//-webkit-user-modify is nessesary for Android 4.x
field.setAttribute('style', 'position:absolute; top: 0px; opacity: 0; -webkit-user-modify: read-write-plaintext-only; left:0px;');
document.body.appendChild(field);
//adding onfocus event handler for out temp field
field.onfocus = function(){
//this timeout of 200ms is nessasary for Android 2.3.x
setTimeout(function() {
field.setAttribute('style', 'display:none;');
setTimeout(function() {
document.body.removeChild(field);
document.body.focus();
}, 14);
}, 200);
};
//focusing it
field.focus();
}, 50);
}
并在需要时在您的 js 文件中的任何位置调用它,例如
hideKeyboard();
我有一个旧的 android 应用程序是用 cordova 开发的,我不太熟悉它作为本机 java。在我的应用程序案例中,当它打开时显示一个带有用户名、密码和登录按钮的登录屏幕,我发现处理此功能的文件是 signin.js
,代码如下
Ext.define('GBMob.view.Signin',{
extend: 'Ext.form.Panel',
requires: [
'Ext.data.JsonP',
'Ext.field.Password',
'Ext.form.FieldSet',
'GBMob.view.GBHome'
],
config: {
items: [
{
xtype: 'fieldset',
title: 'User Info',
instructions: 'Enter Username/Email and Password.',
maxWidth: 550,
items: [
{
xtype: 'textfield',
name: 'username',
label: 'Username'
},
{
xtype: 'passwordfield',
name: 'password',
label: 'Password'
},
{
xtype: 'button',
text: 'Sign in',
ui: 'confirm',
padding: 2,
margin: 15,
flex: 0.3,
handler: function() {
var loadingMask = {
xtype: 'loadmask',
message: 'Signing in ...'
};
Ext.Viewport.setMasked(loadingMask);
var softkeyboard = window.cordova.plugins.SoftKeyBoard;
softkeyboard.hide();
username = SigninView.getValues().username;
password = SigninView.getValues().password;
Ext.data.JsonP.request({
url: 'https://xxxxxx.com/api/login/',
scope: this,
params: {
data: base64.encode(username.toLowerCase() + ':' + password)
},
success: function(result) {
........
........
........
console.log("Signing in with Username: " + username + " and password: " + password);
}
}
]
}]
}
});
到目前为止,代码运行良好,但问题出在用户输入 username and password
并单击 Sign in
按钮后 keyboard was not disappearing
并且由于在重定向到仪表板后一半的仪表板页面消失了(消失),我的意思是只有一半页面可见而一半页面是空白的(可能是之前的登录屏幕键盘部分正在制作仪表板半屏 invisible/blank 白色背景)。所以我决定在点击 Sign in
按钮后立即隐藏键盘,因此做了以下
- 将键盘插件搜索为
cordova plugin search keyboard
- 已将 SoftKeyboard 插件安装为
cordova plugin add org.apache.cordova.plugin.softkeyboard
- 在 signin.js 文件中添加以下两行,如上面代码 中所述
var softkeyboard = window.cordova.plugins.SoftKeyBoard;
softkeyboard.hide();
但是在添加以上两行之后,我根本无法登录,应用程序只显示登录....不断屏蔽。
那么上面添加的两行代码有什么问题,在 cordova 中单击按钮后需要做什么才能立即隐藏键盘?
有人知道如何在 cordova 中隐藏键盘吗?
在 Whosebug 的某个地方找到这个函数来隐藏 android
中的键盘我们需要创建一个 javascript 函数,如下所示
function hideKeyboard() {
//this set timeout needed for case when hideKeyborad
//is called inside of 'onfocus' event handler
setTimeout(function() {
//creating temp field
var field = document.createElement('input');
field.setAttribute('type', 'text');
//hiding temp field from peoples eyes
//-webkit-user-modify is nessesary for Android 4.x
field.setAttribute('style', 'position:absolute; top: 0px; opacity: 0; -webkit-user-modify: read-write-plaintext-only; left:0px;');
document.body.appendChild(field);
//adding onfocus event handler for out temp field
field.onfocus = function(){
//this timeout of 200ms is nessasary for Android 2.3.x
setTimeout(function() {
field.setAttribute('style', 'display:none;');
setTimeout(function() {
document.body.removeChild(field);
document.body.focus();
}, 14);
}, 200);
};
//focusing it
field.focus();
}, 50);
}
并在需要时在您的 js 文件中的任何位置调用它,例如
hideKeyboard();