PhoneGap / Sencha Touch: проблема с отображением WebView на скрытии SoftKeyboard

Программного обеспечения

Я использую Sencha Touch (2.1.1) и PhoneGap (2.5.0) для разработки приложения для Android и iOS.

Моя проблема

В нижней части контейнера есть несколько представлений с полями ввода ( Ext.field.Text и Ext.field.Email ). Когда вы нажимаете поле ввода, Android SoftKeyboard выводит вверх и выталкивает весь вид вверх, так что поле ввода не скрывается клавиатурой.

Теперь, когда вы скрываете клавиатуру (нажав кнопку скрытия Android или нажав куда угодно, кроме поля ввода), WebView не всегда привязывается назад, пока вы снова не коснетесь WebView.

аппаратные средства

В настоящее время я столкнулся с этой проблемой на Nexus 4 (Android 4.2.2). Все работает отлично на iOS (iPhone 4/5) и даже на Sony XPERIA Go (Android 4.0.4).

Скриншоты

Вот несколько скриншотов проблемы:

ВидКлавиатура выдвигает верхКлавиатура закрыта

Я уже понял, что я могу изменить windowSoftInputMode adjustNothing Android, чтобы adjustNothing , но тогда вы не увидите напечатанный текст, пока не adjustNothing клавиатуру …

Обновить

Некоторые комментарии к 3 смягчениям Sergio.

Первое решение показалось мне лучшим. Это влияет только на проект Android и не раздувает мой JS (например, if Ext.os.is.Android ... ) или код iOS. К сожалению, мой Nexus 4 все еще настраивается на фокус и не возвращается на размытие, если я устанавливаю windowSoftInputMode как описано …

Второе решение звучит сложнее. Мне нужно будет переместить каждый (нижний выровненный) компонент на фокус и вернуться на размытие, если ОС – Android. Хотя это определенно возможно, может возникнуть другая проблема: пользователь может скрыть клавиатуру с помощью задней клавиши устройства, не удаляя фокус ввода (размытие не запускается). Поэтому я не думаю, что это подходящее решение.

Третье решение подходит для ввода количества. Но писать виртуальную клавиатуру для ввода текста – непростая задача: выравнивание клавиш различается между локалями (например, y и z переносятся на немецкие клавиатуры), и мы не будем соответствовать ожиданиям пользователя, предлагая альтернативную клавиатуру (вводить ввод, предложения, …).

Не поймите меня неправильно, я благодарен вам за то, что вы поделились своими смягчениями со мной! Но я еще не полностью доволен.

Solutions Collecting From Web of "PhoneGap / Sencha Touch: проблема с отображением WebView на скрытии SoftKeyboard"

Sencha Touch 2.2.0 исправляет проблему!

Я наконец нашел подходящее решение. 15 апреля Sencha выпустила версию 2.2.0 своей системы Touch. После обновления с 2.1.0 макет вернется обратно!

Чтобы сохранить время другого пользователя, обратите внимание, что Sencha Cmd 3.1.x (требуется для версии 2.2.0) не работает с Ruby 2.0.0. Процесс сборки завершится неудачно с некоторыми странными сообщениями об ошибках. Использование 1.9.3 вместо этого работает нормально.

Обновление №2: Sencha Touch 2.2.1 …

Ну .. я только что обновился до Sencha Touch 2.2.1, и проблема вернулась! Поэтому, если вы планируете использовать новейшую версию Sencha Touch, обратите внимание, что клавиатура может сломать ваш макет: /

Несколько месяцев назад я потратил немало времени, пытаясь понять эту проблему. Пробовал кучу вещей, просеянных через Google / StackOverflow.

В конечном счете я не смог сделать то, что искал; Это не похоже на то, что у нас достаточно (легкого) контроля над клавиатурой от Sencha Touch / PhoneGap для многих вещей (поверх позиции клавиатуры у нас также есть в основном 0 контроль над тем, что «return / go / ok» На самом деле, это зависит от версий Android, особенно если это поле с номерами.) Однако:

Смягчение 1: windowSoftInputMode="stateUnspecified|adjustResize" приведет к тому, что клавиатура будет закрывать вход, но как только пользователь начнет вводить текст, экран будет настраиваться так, чтобы отображать вход прямо над клавиатурой, и все будет возвращаться по желанию при размытии ввода. Это, по крайней мере, для Samsung Galaxy S2 (2.6), Samsung Galaxy S3 (4.2) и Kyocera Rise (4.0).

Смягчение последствий 2: Одно из решений, которое я реализовал, было на фокусе ввода, изменяя положение входов, чтобы гарантировать, что они будут выше клавиатуры. При размытии ввода вход изменится на исходное местоположение. Это не идеально, потому что вы часто увидите, что входные данные перемещаются в новое место до того, как клавиатура закрывает его, поэтому он выглядит довольно шумно.

Смягчение 3: для числовых полей я использовал модифицированную версию https://market.sencha.com/extensions/numpad, которая создала виртуальную клавиатуру и установила для нее «showBy ()» требуемый ввод. Это гарантировало, что клавиатура никогда не закрывала вход, и приложение не должно было иметь дело с какой-либо перепозиционированием экрана (снимок экрана ниже).

Проблема с смягчением 3: Проблема в том, что это только для числовых полей, и я не смог найти никаких стандартных плагинов для клавиатуры для Sencha Touch (мое приложение сфокусировано на количестве, чтобы ограничение было приемлемым.) Тем не менее, я Вы можете потратить несколько дней, используя плагин numpad, в качестве ядра для создания виртуальной клавиатуры, которая могла бы работать аналогичным образом.

Извините за отсутствие идеального решения. Надеюсь, это полезно!

Введите описание изображения здесь