【问题标题】:Titanium Appcelerator Android - keyboard not staying openTitanium Appcelerator Android - 键盘不保持打开状态
【发布时间】:2015-03-03 14:28:08
【问题描述】:

我正在开发一款 Titanium Android 应用。我有一系列文本字段,当我关注第一个时,软键盘打开然后立即关闭。如果我然后点击第二个,键盘打开并保持打开状态,我可以回到第一个,它保持打开状态,一切都很好。 文本字段是这样创建的:

obj.softKeyboardOnFocus = Titanium.UI.Android.SOFT_KEYBOARD_SHOW_ON_FOCUS;
        obj.height = 40;
        obj.width = 200;
        obj.left = 4;
        obj.top = 3;
        obj.autocorrect = false;
        obj.autocapitalization = Titanium.UI.TEXT_AUTOCAPITALIZATION_NONE;
        obj.focusable = true;
        //obj.clearButtonMode = Titanium.UI.INPUT_BUTTONMODE_ONFOCUS;
        obj.keyboardType = Titanium.UI.KEYBOARD_URL;
        if (Titanium.Platform.displayCaps.platformWidth > 320) {
            obj.font = {
                fontSize : getAndroidNumbers(16, 22)
            };
            obj.top = getAndroidNumbers(3, 4);
            obj.height = getAndroidNumbers(40, 60);
            obj.width = getAndroidNumbers(200, 200);
        }


    var tf = Titanium.UI.createTextField(obj);

我还为除最后一个编辑字段之外的所有字段添加了侦听器,以解决键盘根本无法打开的问题:

prevTf.addEventListener('return',function(){
            Ti.API.debug("return event listener firing for " + tag);
             tf.focus();
         });

prevTf 是列表中的前一个文本字段,而 tf 是当前文本字段,因此当在一个字段上单击返回(“下一个”)时,会聚焦下一个字段(并且键盘保持打开状态)。以前单击 Next 时,焦点会更改为下一个字段,但键盘会关闭。现在 Next 正在工作,但第一个字段不会让键盘保持打开状态。有什么想法吗?

【问题讨论】:

  • 尝试删除obj.softKeyboardOnFocus = Titanium.UI.Android.SOFT_KEYBOARD_SHOW_ON_FOCUS;
  • 嗯,这似乎有帮助。键盘现在保持打开状态。但是,现在如果我按下键盘上的 Next 按钮,焦点会转到下一个字段并且键盘会关闭。我尝试删除事件侦听器,但是当该字段聚焦时,我回到键盘根本没有打开。
  • 您使用的是钛合金吗?还是您在控制器代码中创建文本字段?
  • 不是合金,只是在 javascript 中创建文本字段。
  • 我正在使用 Android 4.2.2 的华为 P6 上测试您的代码。它按预期工作 - 当文本字段获得焦点/按下键盘上的下一个按钮时,键盘可见

标签: android keyboard titanium


【解决方案1】:

我不太清楚你的问题,我的理解是:

  1. 您遇到了键盘自动聚焦窗口的问题。
  2. 您需要键盘上的下一个按钮,以便用户移动到下一个文本字段。

我将在此处添加以上两点的修复,如果我遗漏了您的问题,请发表评论。

1.要删除键盘的自动对焦:我们有 2 个适当的工作解决方案。

示例 1:添加/删除第一个文本字段的 SOFT_KEYBOARD 属性。

var textField1 = Ti.UI.createTextField({
   borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED,
   color: '#336699',
   top: 10, left: 10,
   width: 250, height: 60
});

//keyboard auto-focus code added here
textField1.softKeyboardOnFocus = Ti.UI.Android.SOFT_KEYBOARD_HIDE_ON_FOCUS;
textField1.addEventListener('click',function(e) {
   textField1.setSoftKeyboardOnFocus(Ti.UI.Android.SOFT_KEYBOARD_SHOW_ON_FOCUS);
   textField1.focus();
});

示例 2:将 SOFT_KEYBOARD 属性添加到当前窗口。 (这好多了,但是光标在文本字段中可见

var win = Ti.UI.createWindow({
   backgroundColor: 'white',
   windowSoftInputMode: Titanium.UI.Android.SOFT_INPUT_STATE_HIDDEN //keyboard auto-focus code added here
});

var textField = Ti.UI.createTextField({
   borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED,
   color: '#336699',
   top: 10, left: 10,
   width: 250, height: 60
});

win.add(textField);
win.open(); 

2。要允许键盘中的下一个按钮: 大多数 android 设备会自动处理下一个按钮功能,但如果您仍想指定这些值,您可以使用文本字段的 returnKeyType 属性。

一个窗口中有两个文本字段的完整示例,如下:

var win = Ti.UI.createWindow({
   backgroundColor: 'white',
   windowSoftInputMode: Titanium.UI.Android.SOFT_INPUT_STATE_HIDDEN //keyboard auto-focus code
});

var textField1 = Ti.UI.createTextField({
   borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED,
   color: '#336699',
   top: 10, left: 10,
   width: 250, height: 60 , 
   returnKeyType: Titanium.UI.RETURNKEY_NEXT //returnKeyType code here
});

var textField2 = Ti.UI.createTextField({
   borderStyle: Ti.UI.INPUT_BORDERSTYLE_ROUNDED,
   color: '#336699',
   top: 10, left: 10,
   width: 250, height: 60,
   returnKeyType: Titanium.UI.RETURNKEY_DONE //returnKeyType code here
});

win.add(textField1);
win.add(textField2);
win.open(); 

希望对你有帮助!!

【讨论】:

  • 这不是我想要的 - 问题是键盘没有在它应该显示的时候显示。我试图显示键盘,而不是隐藏它。如果您可以提供一个在文本字段获得焦点时始终显示键盘的建议,那将是完美的。至于下一个按钮,它就在那里,但具体取决于我正在运行的代码(我已经尝试了几件事来让它工作)它会导致键盘关闭。
猜你喜欢
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多