WebView представляет простейший элемент для рендеринга html-кода, базирующийся на движке WebKit. Благодаря этому мы можем использовать WebView как примитивный веб-браузер, просматривая через него контент из сети интернет. Использование движка WebKit гарантирует, что отображение контента будет происходить примерно такжe, как и в других браузерах, построенных на этом движке - Google Chrome и Safari.
Некоторые основные методы класса WebView:
boolean canGoBack(): возвращает true, если перед текущей веб-страницей в истории навигации WebView еще есть страницы
boolean canGoForward(): возвращает true, если после текущей веб-страницей в истории навигации WebView еще есть страницы
void clearCache(boolean includeDiskFiles): очищает кэш WebView
void clearFormData(): очищает данный автозаполнения полей форм
void clearHistory(): очищает историю навигации WebView
String getUrl(): возвращает адрес текущей веб-страницы
void goBack(): переходит к предыдущей веб-странице в истории навигации
void goForward(): переходит к следующей веб-странице в истории навигации
void loadData(String data, String mimeType, String encoding): загружает в веб-браузере данные в виде html-кода, используя указанный mime-тип и кодировку
void loadDataWithBaseURL (String baseUrl, String data, String mimeType, String encoding, String historyUrl):
также загружает в веб-браузере данные в виде html-кода, используя указанный mime-тип и кодировку, как и метод loadData()
. Однако кроме того,
в качестве первого параметра принимает валидный адрес, с которым ассоциируется загруженные данные.
Зачем нужен этот метод, если есть loadData()
? Содержимое, загружаемое методом loadData()
, в качестве значения для
window.origin
будет иметь значение null
, и таким образом, источник загружаемого содержимого не сможет пройти проверку на достоверность.
Метод loadDataWithBaseURL()
с валидными адресами (протокол может быть и HTTP, и HTTPS) позволяет установить источник содержимого.
void loadUrl(String url): загружает веб-страницу по определенному адресу
void postUrl(String url, byte[] postData): отправляет данные с помощью запроса типа "POST" по определенному адресу
void zoomBy(float zoomFactor): изменяет масштаб на опредленный коэффициент
boolean zoomIn(): увеличивает масштаб
boolean zoomOut(): уменьшает масштаб
Работать с WebView очень просто. Определим данный элемент в разметке layout:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/webBrowser" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout>
Для получения доступа к интернету из приложения, необходимо указать в файле манифеста AndroidManifest.xml соответствующее разрешение:
<uses-permission android:name="android.permission.INTERNET"/>
Чтобы загрузить определенную страницу в WebView, через метод loadUrl()
надо установить ее адрес:
package com.example.viewapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.webkit.WebView; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView browser=findViewById(R.id.webBrowser); browser.loadUrl("https://metanit.com"); } }
Вместо определения элемента в layout мы можем создать WebView в коде Activity:
WebView browser = new WebView(this); setContentView(browser); browser.loadUrl("http://metanit.com");
Кроме загрузки конкретной страницы из интернета с помощью метод loadData()
:
WebView browser= findViewById(R.id.webBrowser); browser.loadData("<html><body><h2>Hello, Android!</h2></body></html>", "text/html", "UTF-8");
Первым параметром метод принимает строку кода html, во втором - тип содержимого, а в третьем - кодировку.
По умолчанию в WebView отключен javascript, чтобы его включить надо применить метод setJavaScriptEnabled(true) объекта WebSettings:
import android.webkit.WebSettings; //..................................... WebView browser = findViewById(R.id.webBrowser); WebSettings webSettings = browser.getSettings(); webSettings.setJavaScriptEnabled(true);