Иногда требуется показать веб-сайт прямо внутри приложения, минуя браузер. В Android для этого предусмотрен компонент WebView. Он интегрирует полноценный браузерный движок в ваше приложение, позволяя загружать любые веб-страницы. Сегодня в Android Studio мы создадим простое браузерное приложение: поле для ввода адреса, кнопку «Перейти» и область для просмотра. Вся логика будет реализована на Kotlin, а урок разбит на небольшие шаги, чтобы его мог освоить даже новичок.
Что понадобится
Создайте новый проект с пустым Activity. В файле AndroidManifest.xml добавьте разрешение на доступ к интернету — без него WebView не сможет загружать сайты.
<uses-permission android:name="android.permission.INTERNET" />
Также разрешите использовать незащищённый трафик, если вы будете тестировать на локальном сервере с HTTP. Для этого в тег <application> добавьте android:usesCleartextTraffic="true".
Добавляем WebView в разметку
Откройте activity_main.xml и разместите на экране три элемента: поле ввода EditText для URL, кнопку Button для перехода и сам WebView, занимающий всё оставшееся пространство.
<EditText
android:id="@+id/urlInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Введите адрес" />
<Button
android:id="@+id/goButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Перейти" />
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
Настраиваем WebView в коде
В MainActivity.kt найдём элементы и пропишем логику. Сначала получим ссылку на WebView и включим поддержку JavaScript — многие современные сайты без него не работают. Затем разрешим открывать ссылки внутри WebView, а не в стороннем браузере.
val webView = findViewById<WebView>(R.id.webView)
webView.settings.javaScriptEnabled = true
webView.webViewClient = WebViewClient()
Класс WebViewClient перехватывает нажатия на ссылки внутри страницы и загружает их в том же WebView, а не передаёт в системный браузер. Без этого любая ссылка будет открываться снаружи приложения.
Обрабатываем нажатие кнопки
Теперь свяжем кнопку с полем ввода. При нажатии берём введённый текст, добавляем https://, если пользователь его не указал, и передаём URL в WebView.
val urlInput = findViewById<EditText>(R.id.urlInput)
val goButton = findViewById<Button>(R.id.goButton)
goButton.setOnClickListener {
var url = urlInput.text.toString().trim()
if (!url.startsWith("http://") && !url.startsWith("https://")) {
url = "https://$url"
}
webView.loadUrl(url)
}
Навигация назад внутри WebView
По умолчанию кнопка «Назад» на устройстве закрывает приложение, даже если внутри WebView пользователь перешёл по нескольким страницам. Чтобы вернуться на предыдущую страницу, а не выходить из программы, переопределим метод onBackPressed.
override fun onBackPressed() {
if (webView.canGoBack()) {
webView.goBack()
} else {
super.onBackPressed()
}
}
Загрузка локального HTML
WebView умеет показывать не только удалённые сайты, но и HTML-код, хранящийся прямо в приложении. Например, можно отобразить страницу справки, вшитую в APK. Для этого используется метод loadDataWithBaseURL.
val htmlContent = """
<html>
<body>
<h1>Привет из Kotlin!</h1>
<p>Эта страница загружена из строки.</p>
</body>
</html>
""".trimIndent()
webView.loadDataWithBaseURL(null, htmlContent, "text/html", "UTF-8", null)
Полезные советы для начинающих
- Не забывайте про безопасность. Если вы загружаете произвольные URL, убедитесь, что WebView не выполняет опасный JavaScript с ненадёжных источников. Для этого можно настроить
WebViewClient.shouldOverrideUrlLoading. - Оптимизируйте загрузку. Включите кэширование:
webView.settings.cacheMode = WebSettings.LOAD_DEFAULT. Это ускорит повторные заходы на сайт. - Проверяйте соединение. Если интернета нет, WebView покажет стандартную ошибку. Можно переопределить
onReceivedErrorвWebViewClient, чтобы показать своё сообщение.
Что мы освоили
Сегодняшний урок в Android Studio на языке Kotlin научил вас встраивать полноценный браузер в своё приложение. Вы создали поле ввода адреса, загрузили веб-страницу, настроили навигацию назад и даже показали локальный HTML. WebView — это мощный инструмент, который используется в банковских приложениях, справочниках и программах для чтения новостей. Теперь вы можете добавить его в свой проект и открывать любые сайты, не покидая приложения. Попробуйте загрузить страницу со сложным дизайном — убедитесь, что всё выглядит как в обычном браузере.