2015-01-05 6 views
0

Я работаю над титановым Android-приложением. У меня есть ряд текстовых полей, и когда я фокусируюсь на первом, открывается мягкая клавиатура, а затем сразу же закрывается. Если я затем коснусь второго, клавиатура откроется и останется открытой, и я смогу вернуться к первому, и он останется открытым, и все в порядке. Текстовые поля создаются так:Titanium Appcelerator 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 работает, но первое поле не удерживает клавиатуру открытой. Есть идеи?

+0

попробуйте удалить 'obj.softKeyboardOnFocus = Titanium.UI.Android.SOFT_KEYBOARD_SHOW_ON_FOCUS;' – turtle

+0

Ну, похоже, это помогает. Теперь клавиатура остается открытой. Однако теперь, если я нажимаю кнопку «Далее» на клавиатуре, фокус переходит в следующее поле и клавиатура закрывается. Я попытался удалить прослушиватель событий, но потом я снова вернусь к клавиатуре, не открывая ее, когда поле фокусируется. – nasch

+0

Вы используете титановый сплав? или вы создаете текстовые поля внутри кода контроллера? – WeMakeSoftware

ответ

0

Я не совсем ясно, с вопросом, что я понимаю, что:

  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. Для того, чтобы разрешить следующую кнопку в клавиатуре: Большинство андроид устройств автоматически обрабатывает следующую функцию кнопки, но если вы все еще хотите указать это значение, вы можете использовать свойство текстового поля 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(); 

Надеется, что это помогает !!

+0

Это не то, что мне нужно - проблема в том, что клавиатура не отображается, когда она должна. Я пытаюсь показать клавиатуру, а не скрывать ее. Если вы можете предоставить предложение, которое всегда будет показывать клавиатуру, когда текстовое поле имеет фокус, это будет идеально. Что касается следующей кнопки, она есть, но в зависимости от того, какой код я запускаю (я пробовал несколько вещей, чтобы заставить это работать), это заставляет клавиатуру закрываться. – nasch

Смежные вопросы