Intereting Posts
Как избежать тоста, если уже есть один тост Ошибка раздувания класса CollapsingToolbarLayout Как разместить кнопку плавающего действия исключительно на одном фрагменте только в макете вкладки @IntDef аннотирование и возвращаемое значение из кода другого, который нельзя аннотировать или как временно отключить аннотацию от влияния на код? Как избежать 15-секундной задержки / кэширования в Android Media Player при воспроизведении потока Активность, перемещающаяся снизу вверх, но фоновая активность не должна перемещаться Кнопка Right Align в горизонтальном LinearLayout Как отображать изображение в TextView от Android? Calendar.MINUTE, дающий минуты без начального нуля Ошибка Разбавление класса com.google.android.maps.MapView Увеличивает ли срок подписки на подписку на участие в приложениях Android с каждым ежемесячным обновлением? Android ViewPager с RecyclerView работает неправильно внутри BottomSheet Google Checkout недоступен в моей стране, как я могу публиковать платные приложения в GooglePlay? Непредсказуемое поведение при доступе к представлению из другого потока RemoveCallbacks не останавливается

Android WebView: очень длинный ответ кнопки

У меня есть небольшое веб-приложение, которое я сделал для работы с функциями Android WebView.

У меня есть div, которые я использую в качестве кнопок (с атрибутами onclick ). Попробовав приложение (в браузере устройства), я сразу заметил огромное количество отставания после нажатия кнопки. Задержка возникает между тем, когда я нажимаю кнопку, и когда браузер показывает оранжевую подсветку вокруг нее.

Я провел некоторое тестирование и получил некоторую информацию:

  • JavaScript не проблема. Я отсоединил все мои скрипты и заглушил все атрибуты onclick . Производительность не изменилась.
  • CSS3 – это не проблема. Я избавился от всех причудливых градиентов, и производительность не изменилась.
  • Количество элементов не является проблемой. Я попробовал это с несколькими элементами на странице, и производительность не изменилась.
  • Doctype и мета-материал не проблема. Я убедился, что использую то, что рекомендует Android.

Я очень рад, почему так много отстает. Я устранил все, что могло бы вызвать его, но ничего не помогло.

Я что-то упускаю?

Как удалить задержку после нажатия кнопки?

Solutions Collecting From Web of "Android WebView: очень длинный ответ кнопки"

В основном, события click на мобильных браузерах задерживаются на 300 мс. Знаете ли вы о быстром шаблоне кнопок? В основном вы можете использовать событие touchstart (которое срабатывает без задержки).

Вот полное объяснение: http://code.google.com/mobile/articles/fast_buttons.html

Таким образом, WebView проводит каждое событие нажатия, чтобы увидеть, является ли это двойным нажатием или событием переноса касания. Существует альтернатива привязке к событиям touchstart. Если вы укажете с помощью мета-директивы viewport, что ваш WebView не должен увеличивать или прокручивать, сенсорные события сразу достигнут вашего кода (начиная с Gingerbread).

Сведения о директиве viewport можно найти здесь: http://developer.android.com/guide/webapps/targeting.html

Попробуйте вставить html-код

<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, user-scalable=no">

И быстрый клик по щелчку клика больше не является проблемой (для меня 4.2.2 и WebChromeClient)

Поскольку код Google очень сложный, я реализовал свой собственный с помощью Mootools 1.3+:

 Element.Events.touch = { base: 'touchend', condition: function(e) { return ((new Date().getTime() - this.startT < 200) && this.valid) ? true : false; }, onAdd: function(fn) { this.addEvent('touchstart', function(e) { this.valid = true; this.startT = new Date().getTime(); this.startX = e.touches[0].clientX; this.startY = e.touches[0].clientY; }); this.addEvent('touchmove', function(e) { if ((Math.abs(e.touches[0].clientX - this.startX) > 10) || (Math.abs(e.touches[0].clientY - this.startY) > 10)) this.valid = false; }); } }; 

Просто поместите этот код на свою страницу и теперь используйте событие касания, а не нажмите :

 $('id').addEvent('touch', function() { // your code }); 

Он работает, добавляя событие touchhend и touchstart, если они происходят менее чем за 200 мс, и прикосновение не слишком сильно затягивается, а это не действует.

Он отлично работал на 2,2 и 4,0