WebView — пример использования


WebView — это элемент View, позволяющий отображать веб-страницы. С помощью WebView вы легко можете отобразить любой онлайн-контент внутри вашего приложения или даже создать собственный браузер. Использование данного элемента не представляет каких-либо сложностей, и мы продемонстрируем это на примере создания простого браузера.

WebView - пример использования

Создадим приложение и назовем его TestBrowser. Приложение будет состоять из двух Активити. Первое будет отображать простой экран с одной кнопкой. При нажатии на кнопку будет запускаться второе Активити с отображением страницы Google в элементе WebView.

Добавим строковые ресурсы в приложение — res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">TestBrowser</string>    
    <string name="action_settings">Settings</string>
    <string name="get_google">Запустить Google!</string>

</resources>

Создадим layout для первого Активити — res/layout/activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/get_google"
        android:id="@+id/btn"
        android:layout_margin="15dp" />

</LinearLayout>

Добавим код MainActivity.java

package ru.androiddocs.testbrowser;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends ActionBarActivity {

    Button mBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBtn = (Button) findViewById(R.id.btn);
        mBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(Intent.ACTION_VIEW, 
                        Uri.parse("http://google.ru")));
            }
        });
    }
}

Тут все просто — определяем layout. Находим кнопку и «вешаем» на нее обработчик клика. В обработчике запускаем новое Активити с использованием Intent-фильтров (передаем адрес сайта, который нужно запустить). Обратите внимание, что мы не указываем явно, какое именно Активити нужно запустить. Андроид предоставит нам меню выбора, где будут отображены все возможные Активити/приложения, способные обрабатывать подобные запросы.

Добавим layout для второго Активити — res/layout/web.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <WebView
        android:id="@+id/wv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </WebView>

</LinearLayout>

Код второго Активити — WebActivity.java

package ru.androiddocs.testbrowser;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;


public class WebActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.web);

        WebView webView = (WebView) findViewById(R.id.wv);
        Uri data = getIntent().getData();
        webView.loadUrl(data.toString());
    }
}

Здесь тоже нет ничего замудренного. Устанавливаем нужный layout, находим наш элемент WebView, получаем данные из Intent-а и загружаем контент в WebView.

В файл манифеста нам необходимо добавить права доступа в интернет:

<uses-permission android:name="android.permission.INTERNET"/>

и информацию о втором Активити, включая информацию об интент-фильтрах. Строчка:

<data android:scheme="http"/>

Позволит определить ОС, что данное активити способно обрабатывать HTTP-запросы.

Файл AndroidManifest.xml для Android Studio:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.androiddocs.testbrowser" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <activity android:label="TestBrowser" android:name="WebActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW"/>
                <data android:scheme="http"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>

Запускаем приложение.

WebView - пример использования
WebView - пример использования

Если вы захотите изменить название, отображаемое в диалоге выбора, то измените это в манифесте в свойстве android:label для второго Активити.

WebView - пример использования

Комментариев: 7 на “WebView — пример использования

  1. Trik

    Например в AIDE оно не собирается.

    Reply
    1. admin Post author

      Про сборку в AIDE не подскажу — не пользовался.

      Reply
  2. Александр

    Не могу загрузить с локального ресурса, пишет что страница отключена или перемещена
    Использую этот код
    WebView veb=(WebView)findViewById(R.id.web);
    veb.getSettings().setJavaScriptEnabled(true);
    veb.loadUrl(«fail:///android_asset/test.html»);
    Подскажите в чем проблема

    Reply
    1. admin Post author

      С внешнего сайта загружается?

      Reply
    2. Oybek

      в место » fail:///» напишите «file:///»

      Reply
  3. Александр

    Нет из проекта res/asset/

    Reply
  4. Александр

    Нашел в интернете:
    «Если вы хотите загружать в WebView страницы не из интернета, а со своего приложения, то разместите нужные файлы в папке /res/assets, например, res/assets/mypage.html. Доступ к файлу вы можете получить через конструкцию file://android_asset:
    myBrowser = (WebView)findViewById(R.id.mybrowser);
    myBrowser.loadUrl(«file:///android_asset/mypage.html»); «

    Reply

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*