Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android WebView使用(一)

Android WebView使用(一)

編輯:關於Android編程

前言

Android內置webkit內核的高性能浏覽器,而WebView則是在這個基礎上進行封裝後的一個 控件,WebView直譯網頁視圖,我們可以簡單的看作一個可以嵌套到界面上的一個浏覽器控件!
WebView有三個重要的類:WebChromeClient,WebViewClient,WebSettings

WebChromeClient:輔助WebView處理Javascript的對話框、網站圖標、網站title、加載進度等!
WebViewClient:輔助WebView處理各種通知與請求事件!
WebSettings:WebView相關配置的設置,比如setJavaScriptEnabled()設置是否允許JS腳本執行

簡單實用

使用一:加載一個簡單的網頁

效果圖:
這裡寫圖片描述

public class MainActivity extends AppCompatActivity {

    private WebView webView;
    private long exitTime = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = new WebView(this);
        webView.setWebViewClient(new WebViewClient() {
            //設置在webView點擊打開的新網頁在當前界面顯示,而不跳轉到新的浏覽器中
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });
        webView.getSettings().setJavaScriptEnabled(true);  //設置WebView屬性,運行執行js腳本
        webView.loadUrl("http://www.baidu.com/");          //調用loadView方法為WebView加入鏈接
        setContentView(webView);                           //調用Activity提供的setContentView將webView顯示出來
    }


    //我們需要重寫回退按鈕的時間,當用戶點擊回退按鈕:
    //1.webView.canGoBack()判斷網頁是否能後退,可以則goback()
    //2.如果不可以連續點擊兩次退出App,否則彈出提示Toast
    @Override
    public void onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack();
        } else {
            if ((System.currentTimeMillis() - exitTime) > 2000) {
                Toast.makeText(getApplicationContext(), "再按一次退出程序",
                        Toast.LENGTH_SHORT).show();
                exitTime = System.currentTimeMillis();
            } else {
                super.onBackPressed();
            }

        }
    }
}

使用二:布局代碼中設置WebView

效果圖
這裡寫圖片描述

package com.example.hfs.webviewsimpledemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btnBack;
    private TextView txtTitle;
    private Button btnTop;
    private Button btnRefresh;
    private WebView wView;
    private long exitTime = 0;

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

        initView();
    }

    private void initView() {
        btnBack= (Button) findViewById(R.id.btn_back);
        btnTop= (Button) findViewById(R.id.btn_top);
        btnRefresh= (Button) findViewById(R.id.btn_refresh);
        txtTitle= (TextView) findViewById(R.id.txt_title);
        wView= (WebView) findViewById(R.id.wView);

        btnBack.setOnClickListener(this);
        btnRefresh.setOnClickListener(this);
        btnTop.setOnClickListener(this);

        wView.loadUrl("http://www.baidu.com");
        wView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                txtTitle.setText(title);
            }
        });

        wView.setWebViewClient(new WebViewClient() {
            //在webview裡打開新鏈接
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

    }


    //我們需要重寫回退按鈕的時間,當用戶點擊回退按鈕:
    //1.webView.canGoBack()判斷網頁是否能後退,可以則goback()
    //2.如果不可以連續點擊兩次退出App,否則彈出提示Toast
    @Override
    public void onBackPressed() {
        if (wView.canGoBack()) {
            wView.goBack();
        } else {
            if ((System.currentTimeMillis() - exitTime) > 2000) {
                Toast.makeText(getApplicationContext(), "再按一次退出程序",
                        Toast.LENGTH_SHORT).show();
                exitTime = System.currentTimeMillis();
            } else {
                super.onBackPressed();
            }

        }
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_back:
                finish();          //關閉當前Activity
                break;
            case R.id.btn_refresh:
                wView.reload();    //刷新當前頁面
                break;
            case R.id.btn_top:
                wView.setScrollY(0);   //滾動到頂部
                break;
        }
    }
}

布局文件:



    

注意:這裡涉及到一個重定向的問題,可能點兩次返回都沒有退出App,解決辦法:我們只需將 shouldOverrideUrlLoading裡的東東刪掉,然後寫上return false;即可!

使用三:設置縮放以及自適應屏幕

WebSettings settings = wView.getSettings();
settings.setUseWideViewPort(true);//設定支持viewport
settings.setLoadWithOverviewMode(true);   //自適應屏幕
settings.setBuiltInZoomControls(true);
settings.setDisplayZoomControls(false);
settings.setSupportZoom(true);//設定支持縮放
//去掉縮放控件
settings.setDisplayZoomControls(false);

如果時對字體進行縮放,則可以這樣:

settings.setTextZoom(int);

也可以直接設置字體:

settings.setTextSize(TextSize.LARGER);

這裡,Android自帶五個可選字體大小的值:SMALLEST(50%),SMALLER(75%),NORMAL(100%),LARGER(150%), LARGEST(200%)。

使用四:獲取WebView的Cookie數據

我們都知道Cookie其實只是一個代表用戶唯一標識的字符串,情景一般是: 用戶輸入賬號密碼後,點擊登陸,用戶要拿著這個Cookie去訪問服務器提供的相關服務! 我們可以把cookie的獲取寫到onPageFinsihed的方法中:

@Override
public void onPageFinished(WebView view, String url) {             
    CookieManager cookieManager = CookieManager.getInstance();
    String CookieStr = cookieManager.getCookie(url);
    Log.e("HEHE", "Cookies = " + CookieStr);
    super.onPageFinished(view, url);
}

使用五:設置WebView的Cookie數據

我們上面獲取到了Cookie或者通過其他途徑獲得了Cookie,我們如何為WebView設置Cookie呢? 我們可以在需要設置Cookie的地方加入下述代碼:

CookieSyncManager.createInstance(MainActivity.this);  
CookieManager cookieManager = CookieManager.getInstance();  
cookieManager.setAcceptCookie(true);  
cookieManager.setCookie(url, cookies);  //cookies是要設置的cookie字符串 
CookieSyncManager.getInstance().sync();

注意:上述代碼需要寫在loadUrl()之前,而且如果設置了Cookie了,盡量別再進行其他的設置 不然可能會無效,建議設置cookie的寫在webView相關設置的最後面,loadUrl()之前!

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved