Intereting Posts
Android ProGuard "java.lang.nosuchfielderror: Toast" исключение Частные и общедоступные адреса в Bluetooth низкой энергии на Android Eclipse не запускает приложение для Android на эмуляторе во второй раз Когда использовать какой конструктор для ComponentName в Android? Как обрабатывать миграцию области, если пользователи пропускают обновления Добавить ViewPagerIndicator в Android Studio Доступ к базе данных sqlite на устройстве Android Вызов функции DialogFragment show () изнутри onRequestPermissionsResult () вызывает исключение IllegalStateException в Marshmallow Как отключить «автономный режим» gradle в студии Android? Отправить запрос приложения всем друзьям в Facebook с помощью «Запроса Диалог» на Android Учебное пособие по лицензированию Android – заключительный шаг Ошибка: не удается найти символьную переменную abc_ic_ab_back_mtrl_am_alpha Как я могу изменить по умолчанию черный тусклый фон «цвет» (не размер тусклого) диалогового окна? Получить растровое изображение из видимого увеличенного изображения Android Ресурсы VectorDrawableCompat $ NotFoundException на KitKat и ниже

В чем разница между setWebViewClient и setWebChromeClient?

В чем разница между setWebViewClient и setWebChromeClient в Android?

Solutions Collecting From Web of "В чем разница между setWebViewClient и setWebChromeClient?"

Из исходного кода :

 // Instance of WebViewClient that is the client callback. private volatile WebViewClient mWebViewClient; // Instance of WebChromeClient for handling all chrome functions. private volatile WebChromeClient mWebChromeClient; // SOME OTHER SUTFFF....... /** * Set the WebViewClient. * @param client An implementation of WebViewClient. */ public void setWebViewClient(WebViewClient client) { mWebViewClient = client; } /** * Set the WebChromeClient. * @param client An implementation of WebChromeClient. */ public void setWebChromeClient(WebChromeClient client) { mWebChromeClient = client; } 

Использование WebChromeClient позволяет обрабатывать диалоги, значки, заголовки и прогресс Javascript. Взгляните на этот пример: добавление поддержки alert () в WebView

На первый взгляд, существует слишком много различий WebViewClient & WebChromeClient . Но, в основном: если вы разрабатываете WebView, который не потребует слишком много функций, но рендеринга HTML, вы можете просто использовать WebViewClient . С другой стороны, если вы хотите (например) загрузить значок на странице, которую вы WebChromeClient , вы должны использовать объект WebChromeClient и переопределить onReceivedIcon(WebView view, Bitmap icon) .

В большинстве случаев, если вы не хотите беспокоиться об этих вещах … вы можете просто сделать это:

 webView= (WebView) findViewById(R.id.webview); webView.setWebChromeClient(new WebChromeClient()); webView.setWebViewClient(new WebViewClient()); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl(url); 

И ваш WebView будет (теоретически) иметь все функции, реализованные (как собственный браузер для Android).

Я чувствую, что этот вопрос требует немного больше деталей. Мой ответ вдохновлен Android-программированием, The Nerd Ranch Guide (2-е издание).

По умолчанию JavaScript отключен в WebView. Вам не всегда нужно его использовать, но для некоторых приложений может потребоваться это.

Загрузка URL-адреса должна быть выполнена после настройки WebView, поэтому вы делаете это последним. До этого вы включите JavaScript, вызвав getSettings() чтобы получить экземпляр WebSettings и вызвать WebSettings.setJavaScriptEnabled(true) . WebSettings – это первый из трех способов изменения вашего WebView. Он имеет различные свойства, которые вы можете установить, например, строку пользовательского агента и размер текста.

После этого вы настраиваете свой WebViewClient. WebViewClient – это интерфейс событий. Предоставляя собственную реализацию WebViewClient, вы можете реагировать на события рендеринга. Например, вы можете обнаружить, когда рендер начинает загружать изображение с определенного URL-адреса или решает, повторно отправить запрос POST на сервер.

У WebViewClient есть много методов, которые вы можете переопределить, большинство из которых вы не будете иметь дело. Однако вам нужно заменить стандартную реализацию shouldOverrideUrlLoading(WebView, String) для shouldOverrideUrlLoading(WebView, String) . Этот метод определяет, что произойдет, когда новый URL-адрес будет загружен в WebView, например, нажав ссылку. Если вы вернете true, вы говорите: «Не обрабатывайте этот URL-адрес, я сам обрабатываю его». Если вы вернете false, вы говорите: «Идите и загрузите этот URL-адрес, WebView, я ничего с ним не делаю «.

По умолчанию реализация запускает неявное намерение с URL-адресом, как и раньше. Но теперь это будет серьезная проблема. Первое, что делают некоторые веб-приложения, – это перенаправить вас на мобильную версию веб-сайта. С помощью WebViewClient по умолчанию это означает, что вы немедленно отправлены в веб-браузер пользователя по умолчанию. Это именно то, чего вы пытаетесь избежать. Исправление прост – просто переопределите реализацию по умолчанию и верните false.

Используйте WebChromeClient для создания вещей. Поскольку вы тратите время на создание своего собственного WebView, давайте немного подберем его, добавив индикатор выполнения и обновив субтитры панели инструментов с заголовком загруженной страницы.

Чтобы подключить ProgressBar, вы будете использовать второй обратный вызов в WebView: WebChromeClient.

WebViewClient – это интерфейс для ответа на события рендеринга; WebChromeClient – это интерфейс событий для реагирования на события, которые должны изменять элементы хром вокруг браузера. Это включает предупреждения JavaScript, значки и, конечно, обновления для загрузки прогресса и название текущей страницы.

onCreateView(…) его в onCreateView(…) . Использование WebChromeClient для обновления информации. Обновления обновлений и обновления onProgressChanged(WebView, int) имеют свой собственный метод обратного вызова, onProgressChanged(WebView, int) и onReceivedTitle(WebView, String) . Прогресс, который вы получаете от onProgressChanged(WebView, int) представляет собой целое число от 0 до 100. Если ему 100, вы знаете, что страница загружена, поэтому вы скрываете ProgressBar, устанавливая его видимость в View.GONE .

Отказ от ответственности: эта информация была взята из Android Programming: The Big Nerd Ranch Guide с разрешения авторов. Для получения дополнительной информации об этой книге или для покупки копии, пожалуйста, посетите bignerdranch.com.