Просмотр закрывается в неправильном положении после закрытия клавиатуры – Cordova / PhoneGap – Android

У меня есть приложение Кордовы (с использованием рамки angularjs), вот мое мнение:

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

Когда я фокусирую вход, который требует, чтобы представление перемещалось вверх, чтобы сохранить вход видимым, когда клавиатура (на экране) выглядит так:

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

Когда я изменяю фокус с входа в другое место (размытие), клавиатура закрывается (как и должна), но перерисовывает представление в неправильном положении:

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

Когда я проверяю Chrome, он показывает все элементы в том месте, где они должны быть, а не там, где они находятся на дисплее:

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

Я совершенно не знаю, что вызывает эту ошибку, я попытался перерисовать представление в методе onDraw , тем самым бесконечно перерисовывая представление, чтобы убедиться, что это исправит его, но безрезультатно. Есть идеи?

Дополнительные данные
Версия Кордовы: 3.5.0-0.2.4
Устройство: Nexus 10 - Android 4.4.4

Я нашел исправление / взлом, а не отличный, но это лучше, чем ничего.

html тег html а затем повторно отображая, он правильно перерисовывает представление.

  fixAndroidKitkatDisplayBug: function () { $(document).on('blur', 'input', function () { var htmlTags = document.getElementsByTagName('html'); var html = htmlTags[0]; html.style.display = 'none'; html.offsetHeight; // no need to store this anywhere, the reference is enough html.style.display = 'block'; }); } 

Затем в index.js, после «onDeviceReady», я вызываю этот метод так

 setTimeout(function (){ if (typeof(device) != 'undefined' && device.platform && device.platform == "Android" && device.version && parseFloat(device.version) == 4.4) { fixAndroidKitkatDisplayBug(); } }, 100); 

(Для меня мне понадобилось setTimeout для определения устройства)

Я смог устранить проблему в нашем приложении, добавив следующий код «hack» в код кнопки отправки.

 $('html, body').scrollTop(0); $('#usernamefield').blur(); $('#passwordfield').blur(); $('#loginform_submit').blur(); 

Поэтому я заставил элементы html и body прокрутить до самого верха, а также убедиться, что ни один элемент не имеет фокуса, поэтому экранная панель фактически исчезнет, ​​прежде чем двигаться дальше.

Надеюсь, это тоже поможет вам.

/ Mika

У меня была такая же проблема. Но я решаю использовать этот код jQuery.

 $('input').on('blur',function(){ document.body.scrollTop = 0; }) 

Это сработало для меня

Я столкнулся с идентичной проблемой с Sencha Touch на Android 4.4.2, и, наконец, это заставило ее работать:

 if (Ext.os.is('Android')) { window.repaint = {}; //dirty fix for screen is scrolling down when user hides keyboard window.onresize = function() { var repaintFn = function() { Ext.defer(function() { var body = document.body; window.repaint.isRepainting = false; if (window.repaint.counter < 3) { window.repaint.counter++; body.style.overflow = (body.style.overflow == 'hidden') ? 'auto' : 'hidden'; repaintFn.call(this); } }, 1500, this); }; if (!window.repaint.isRepainting) { repaintFn.call(this); window.repaint = { counter: 0, isRepainting: true }; } }; 

}

Линия, которая делает трюк:

 body.style.overflow = (body.style.overflow == 'hidden') ? 'auto' : 'hidden'; 

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

Intereting Posts
Как получить размер датчика камеры в устройстве Android? Дилатация и эрозия в Android Обнаружение отключения SPP Bluetooth без использования пакетов Покрытие кода в андроид-студии 1.2 для инструментальных тестов Переключение с двойной панели на одиночную панель смены ориентации Как отключить Keyguard и отобразить активность для пользователя при срабатывании приемника SCREEN_ON? Создание SoftKeyboard с несколькими / альтернативными символами на ключ Как поддерживать textView.setTextIsSelectable в более низких версиях Android? Ошибка Кордовой сборки Gradle при открытии / извлечении zip-файла Уведомление многострочное Google Maps v2 Маркер zOrdering – установить в начало Android: не удалось найти или загрузить основной класс org.gradle.wrapper.GradleWrapperMain Как настроить Android Studio на работу полностью в автономном режиме? Дженкинс и запуск тестов на инструменты для AndroidJUnitRunner Пользователи Android без камер на своих устройствах не могут загружать мои приложения из Google Play – почему?