編輯:關於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()之前!
華為p9 plus怎麼截圖|華為p9 plus怎麼截屏
對於華為P9 Plus如何截屏的還不太清楚,新一代旗艦華為P9於今年的年初已經正式上市,相信已經有不少的花粉們已經入手了,但是現在有一些網友對該機的一些操作
Android百日程序: Fragment動態管理和生命期
之前寫過Fragment使用的程序,Fragment可以靜態,也可以動態載入內存中的,這一章進一步看看如何動態地更換Fragment和看看Fragment生命期都有什麼函
Android開發之RatingBar控件
RatingBar控件為用戶提供一個評分操作的模式。 控件的幾個常用方法:1.setMax()設置RatingBar星級滑塊的最大值.2.setNumStars
手機qq能添加好友嗎 手機qq怎麼添加好友
電腦版qq添加好友估計大家都很熟悉了,那麼手機qq能添加好友嗎?手機qq怎麼添加好友,下面就隨小編一起來看看吧! 手機qq添加好友教程 1.打開手機QQ,利