PhoneGap - Клавиатура на Samsung Galaxy Tab 10.1 на некоторое время делает экран черным и мерцающим - PullRequest
15 голосов
/ 08 ноября 2011

Я занимаюсь разработкой мобильных приложений с использованием HTML5 и CSS3 с использованием PhoneGap.Моя проблема в том, что всякий раз, когда я прикасаюсь к текстовому полю на моей веб-странице, работающей на Samsung Galaxy Tab 10.1 (Android v3.1), оно показывает клавиатуру, но страница становится черной в течение доли секунды.Время от времени он мерцает некоторое время, показывая черный фон, а затем восстанавливается.

Я даже пытался с простой страницей с одним input type="text", и даже с тем же.

Кто угодностолкнулся с подобной проблемой и исправил ее?

Любая помощь очень ценится.

Спасибо.

ОБНОВЛЕНИЕ 1:

Как я сказал выше, мерцание черного даже происходит с приложением, содержащим простую страницу с одним текстовым полем.Ниже приведен код:

<!DOCTYPE html>
<html>
    <head>
        <title> Flickering Problem </title>
        <style>
            html, body{
                -webkit-backface-visibility: hidden;
                overflow: hidden;
                -webkit-transform: translate3d(0,0,0); 
            }
        </style>
    </head>
    <body>
        <input type="text" width="200px" height="100px" />
    </body>
</html>

Я проверил это на своем планшете Android, и мерцание было как на полноценной веб-странице.Я попытался добавить некоторые атрибуты CSS, предложенные здесь для SO, для аналогичной проблемы, которая, как утверждалось, решала, но на самом деле помогла.

Стоит отметить, что мерцание черного происходит при каждом вводе текста в текстовое поле,и я в настоящее время не делаю никакой анимации / переходов с использованием CSS3.

Ответы [ 9 ]

6 голосов
/ 09 декабря 2011

Решение состоит в том, чтобы включить аппаратное ускорение в манифесте Android.

<application android:hardwareAccelerated="true" ... />

Это включает двойную буферизацию через графический процессор и решает проблему.Обратите внимание, что эта опция доступна только в Android 3.0 +.

Вот фон для всех техников: :) Недавно мы тестировали функциональное приложение jQuery Mobile HTML5, упакованное с телефонами PhoneGap Android 2.x, для Galaxy.вкладка 10.1.Мы видели нечто очень похожее, за исключением того, что мы определили заставку для нашего приложения.То, что мы видим, это то, что, когда поле ввода получает фокус, экран на мгновение мигает вверх по заставке.Очень надоедливый!Чтобы убедиться, что это та же проблема, определите заставку для вашего приложения PhoneGap и посмотрите, не вспыхивает ли ваше изображение вместо черного фона.Зная кое-что о том, что происходит с PhoneGap и Android WebView, я лучше всего оцениваю происходящее: PhoneGap загружает основное действие приложения черным фоном и отображает заставку (если она определена) в этом начальном окне.Затем PhoneGap запускает WebView и открывает его поверх главного окна.Когда поле выбрано, Android аннулирует компонент во время его обновления на основе события фокуса или нажатия клавиши или чего-то еще, и Android перерисовывает все.Таким образом, он перерисовывает главное окно за WebView, а затем перерисовывает WebView с содержимым HTML-страницы поверх него.Поскольку устройство не имеет двойной буферизации должным образом, вы видите все это перерисовывание во всей своей безобразной красоте прямо перед вашими глазами.

Мы видели серьезные глюки с веб-формами Android на некоторых телефонах Android 2.xмы протестировали, и это выглядит как очередной глюк, но на этот раз на Galaxy Tab с Honeycomb (3.0).

Мы попытались использовать CSS -webkit-backface-visibility дляустранять проблемы на некоторых телефонах при возникновении мерцания в прошлом - но это вызывало серьезные проблемы с рендерингом в формах HTML .Имейте в виду!В теории это должно быть жизнеспособным решением для введения некоторой двойной буферизации в микс, но по нашему опыту это вызывает больше проблем, чем решает.

4 голосов
/ 09 ноября 2011

Это либо проблема с ОС Android, либо Phonegap.

Если это проблема с Android , это можно исправить только с помощью обновления программного обеспечения ОС.Вы можете проверить это, перейдя на обычный веб-сайт с текстовым полем и нажав на него, чтобы ввести текст.Если он мигает, это, вероятно, ОС.

Если это проблема с Phonegap , это можно исправить, выполнив специальный поиск для этого.Глядя на лучшие результаты в Google, я нашел это:

http://www.senchatouchbits.com/6/fixing-flickering-of-animations-in-phonegap.html

Это говорит о том, что вы вставили -webkit-backface-visibility: hidden; в свой код.Пока я вижу, что вы поместили его в тег html, body, попробуйте поместить его в тег *, например:

*{
-webkit-backface-visibility: hidden;
}

Примечание. Ссылка помещает стиль в тег .x-panelЯ не уверен, относится ли это к их коду или к Android.

Вот еще одна ссылка, на которую вы должны обратить внимание: http://code.google.com/p/jqtouch/issues/detail?id=301

1 голос
/ 21 августа 2012

Если кто-то все еще ищет решение этой проблемы, я нашел запрос поддержки для этой ошибки: http://bugs.dojotoolkit.org/ticket/15365

На сегодняшний день лучший обходной путь состоит в использовании опции AdjustPan Android plusвышеуказанный подкласс ScrollableView?(если вы можете позволить себе создать APK, предназначенный для Android> = 3, вы также можете добавить опцию hardwareAccelerated).Это решает все проблемы, кроме дублирования полей на Android 4. Конечно, если ScrollableView?на самом деле не является обязательным в представлении, содержащем текстовые поля, замена его на представление еще лучше.

1 голос
/ 25 июня 2012

У меня была та же проблема, и вначале я думал, что это связано с манифестной частью приложения.

После нескольких часов устранения проблем это то, что сработало для меня.(Все еще не было проблемы после часа тестирования на телефоне. Samsung Galaxy S2, версия 4.0.3. И для приложения я использую версию 2.1).

html {background: url(img / brownBG.PNG) repeat 0 0;}

Я просто поместил фон в HTML, и теперь он работает нормально.Если вы попробуете это решение, пожалуйста, прокомментируйте, работает ли оно у вас или нет.

РЕДАКТИРОВАТЬ: У меня также есть это правило CSS, которое важно для его работы * {- webkit-backface-visibility: hidden;}

1 голос
/ 17 ноября 2011

Я добавил демонстрационную страницу:

http://jsbin.com/upixel/

Из вашего кода input велико (ширину и высоту необходимо установить css) - в этом случае черный цвет может исходить из цвета крана по умолчанию и мерцания может исходить из блокирования (пробел в телефоне или ошибка скрипта)

посмотрим, разрешит ли это ваше мерцание:

      * {
        -webkit-tap-highlight-color: rgba(0,0,0,0); 
      }

Live Demo

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

0 голосов
/ 21 сентября 2013

У меня есть проверенное решение этой проблемы, я тоже столкнулся с той же проблемой, но решил ее сам.Сначала создайте поле внутри тела и сделайте его скрытым, или вы можете скрыть его за элементом div, используя z-index, чтобы оно не было видимым.Суть в том, что мы должны установить это поле выбора при загрузке страницы, и это наверняка остановит мерцание ... попробуйте, ребята ..... это сработало

0 голосов
/ 15 марта 2012

У меня была такая же проблема на Samsung Galaxy Tab 10.1, как и у вас. Пока я обновил версию Android с 3.1 до 4.0.3 (используя Cyanogenmod 9.0 nightly build 20120302), и без каких-либо изменений кода проблема была решена на моем устройстве.

Так что я думаю, что это проблема компонента веб-просмотра в версии Galaxy Tab для Android.

0 голосов
/ 09 марта 2012

В связи с уже упомянутыми решениями (то есть -webkit-backface-visibility: hidden; android: hardwareAccelerated = "true") я также попробовал одно из следующих:

(применимо только для версии Android> = 3)

  1. AndroidManifest.xml

    андроида: windowSoftInputMode = "adjustPan"

  2. MyActivity.java

    this.runOnUiThread(new Runnable() {
    
        public void run() {
    
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
    
        }
    
    });
    
0 голосов
/ 18 ноября 2011

Не могу сказать, что это решит вашу проблему, но это стоит попробовать. Проверьте файл AndroidManifest.xml на android:configChanges="orientation|keyboardHidden" в теге activity (в приложении).

...