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);