Проблемы StageText с автозаменой и ограничением

Я пытаюсь использовать StageText в приложении Android AIR следующим образом:

var tf:StageText = new StageText();
tf.stage = stage;
tf.viewPort = new Rectangle(0, 0, stage.fullScreenWidth, 90); 
tf.text = "Test";
tf.editable = true;
tf.autoCorrect = false;
tf.fontSize = 50;
tf.color = 0xFF0000;
tf.maxChars = 12;
tf.restrict = "A-Za-z";

При редактировании этого StageText на устройстве Android все работает, как и ожидалось, пока вы не нажмете кнопку удаления. До сих пор предложения автозамены не отображались, но после нажатия кнопки удаления теперь начнут отображаться предложения автозамены. Теперь следующая клавиша, которую вы нажмете, вставит автоматически исправленное слово в позицию курсора вместо любой клавиши, которую вы нажали (например, если вы нажмете «s», будет вставлено «Сын», если это было предложение автокоррекции).

Действительно странно то, что такое поведение происходит только в том случае, если я устанавливаю свойство ограничения в StageText — если я закомментирую строку ограничения, все работает именно так, как я ожидал.


person Pixel Elephant    schedule 18.01.2013    source источник
comment
Имеются ли какие-либо из автоматически исправленных слов значения, отличные от A-Z-Z?   -  person Gone3d    schedule 19.01.2013
comment
@ Gone3d Нет, все они соответствуют ограничениям A-Za-z.   -  person Pixel Elephant    schedule 19.01.2013
comment
Только что проверил ваш код и могу подтвердить, что это действительно происходит как на моем планшете Nexus 7, так и на телефоне Galaxy Nexus под управлением Android 4.2.1. Очень странно. Возможно, вы наткнулись на законную ошибку, тем более что клавиатура Android включала значительное обновление Android 4.2.   -  person Chunky Chunk    schedule 19.01.2013


Ответы (1)


Из документации (flash.text.StageText .ограничение):

Примечание. Ограничения применяются только к пользовательскому вводу; сценарий может вставлять любые символы в текстовое поле.

Поскольку ограничения не надежны на 100%, вместо того, чтобы присваивать значение свойству restrict текстового поля, вы можете самостоятельно оценить текст, используя собственную логику (RegExp) в обработчике событий CHANGE. Это даст вам полный контроль над тем, что пользователи вводят в текстовое поле.

tf.addEventListener(Event.CHANGE, textFieldChangeEventHandler);

private function textFieldChangeEventHandler(event:Event):void
{
    trace(event.target.text);
    //Manage text
}
person Chunky Chunk    schedule 18.01.2013
comment
Это отличный обходной путь для надоедливой ошибки. Следует отметить одну вещь: в обработчике изменений мне пришлось вручную сбросить позицию курсора туда, где она должна быть после удаления любых недопустимых символов, поскольку по умолчанию курсор перемещался в начало текста. - person Pixel Elephant; 20.01.2013