萬能的webView之Activity

對于使用webview加載一個網頁,使用它的loadurl()方法即可郎嫁,如果在程序內要打開網頁,難么就要自己創(chuàng)建一個WebViewClient,通過setWebViewClient進行關聯(lián)捣炬,再如果網頁里面有javaScript那就要設置了

//啟用支持javascriptWebSettings settings =webView.getSettings();

settings.setJavaScriptEnabled(true);

這都是一系列問題溶弟,但有沒有想過直接寫一個activity,只需傳入url就可以顯示網頁蒲稳,包括解決緩存的使用:

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

后退時的操作:

//改寫物理按鍵——返回的邏輯@OverridepublicbooleanonKeyDown(intkeyCode, KeyEvent event) {//TODO Auto-generated method stubif(keyCode==KeyEvent.KEYCODE_BACK)

{

if(webView.canGoBack())

{

webView.goBack();//返回上一頁面returntrue;

}else{

System.exit(0);//退出程序}

}returnsuper.onKeyDown(keyCode, event);

}

等等一些列問題.

在此就引入了一個相對比較萬能的webview,傳入url即可氮趋,復制就能使用的webview的activity

importandroid.content.Intent;

importandroid.util.Log;

importandroid.view.View;

importandroid.webkit.WebView;

importandroid.widget.TextView;

publicclassWhyWebActivityextendsCanbackWebActivityimplementsView.OnClickListener?{

privateTextView?header_title;

privateString?webPageTitle;

@Override

protectedintgetContentView()?{

returnR.layout.activity_new_web;

}

@Override

protectedWebView?getWebview()?{

return(WebView)?findViewById(R.id.new_web_view);

}

@Override

protectedNumberProgressBar?getProgressbar()?{

return(NumberProgressBar)?findViewById(R.id.new_web_progress_bar);

}

@Override

protectedTextView?getTextViewClose()?{

return(TextView)?findViewById(R.id.header_left_close);

}

@Override

protectedvoidsetTitle(String?urlTitle)?{

Intent?intent?=?getIntent();

if(intent?!=null)?{

webPageTitle?=?intent.getStringExtra("title");

}

if(webPageTitle?!=null&&?!webPageTitle.equals(""))?{

header_title.setText(webPageTitle);

}else{

header_title.setText(urlTitle);

}

}

@Override

protectedvoidonLoadError(WebView?webView,interrorCode,?String?description,?String?failingUrl)?{

}

@Override

protectedvoidonLoadEnd(String?url)?{

}

@Override

protectedvoidinitEnd()?{

webview.loadUrl(getIntent().getStringExtra("url"));//?網址

findViewById(R.id.header_left_btn).setOnClickListener(this);//?返回按鈕點擊事件

header_title?=?(TextView)?findViewById(R.id.header_title);

}

@Override

protectedvoidjsCallJava(MWebviewClient?mWebviewClient)?{

}

@Override

protectedvoidonJsRequest(Object?data)?{

}

@Override

publicvoidonClick(View?v)?{

switch(v.getId())?{

//?點擊關閉頁面

caseR.id.header_left_btn:

onBackPressed();

break;

}

}

}

然后就是父類CanBackWebActivity


packagecn.moviebuff.app.homewall.Web;

importandroid.annotation.SuppressLint;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.graphics.Bitmap;

importandroid.graphics.Color;

importandroid.net.http.SslError;

importandroid.os.Bundle;

importandroid.util.Log;

importandroid.view.Gravity;

importandroid.view.KeyEvent;

importandroid.view.View;

importandroid.webkit.JavascriptInterface;

importandroid.webkit.SslErrorHandler;

importandroid.webkit.WebChromeClient;

importandroid.webkit.WebSettings;

importandroid.webkit.WebView;

importandroid.widget.TextView;

importandroid.widget.Toast;

importcom.umeng.socialize.ShareAction;

importcom.umeng.socialize.UMShareListener;

importcom.umeng.socialize.bean.SHARE_MEDIA;

importcom.umeng.socialize.media.UMImage;

importorg.json.JSONException;

importorg.json.JSONObject;

importbutterknife.ButterKnife;

publicabstractclassCanbackWebActivityextendsActivity?{

protectedWebView?webview;

protectedNumberProgressBar?progressbar;

protectedTextView?textViewClose;

protectedMWebviewClient?mWebviewClient;

privateString?webTitle;

@Override

publicvoidonCreate(Bundle?savedInstanceState)?{

super.onCreate(savedInstanceState);

initView();

if(null!=?webview?&&null!=?progressbar?&&null!=?textViewClose)?{

iniWebview();

initEnd();

}

}

@Override

publicIntent?getIntent()?{

returnsuper.getIntent();

}

privatevoidinitView()?{

setContentView(getContentView());

ButterKnife.inject(this);

webview?=?getWebview();

progressbar?=?getProgressbar();

textViewClose?=?getTextViewClose();

toastRoot?=?getLayoutInflater().inflate(R.layout.activity_sign,null);

}

protectedabstractintgetContentView();

protectedabstractWebView?getWebview();

protectedabstractNumberProgressBar?getProgressbar();

protectedabstractTextView?getTextViewClose();

protectedabstractvoidsetTitle(String?urlTitle);

protectedabstractvoidonLoadError(WebView?webView,interrorCode,?String?description,?String?failingUrl);

protectedabstractvoidonLoadEnd(String?url);

protectedabstractvoidinitEnd();

protectedabstractvoidjsCallJava(MWebviewClient?mWebviewClient);

protectedabstractvoidonJsRequest(Object?data);

privatestaticfinalString?APP_CACAHE_DIRNAME?="/webcache";

@SuppressLint("SetJavaScriptEnabled")

@SuppressWarnings("deprecation")

privatevoidiniWebview()?{

webview.getSettings().setSupportZoom(false);

webview.getSettings().setBuiltInZoomControls(false);

try{

webview.getSettings().setJavaScriptEnabled(true);

}catch(Exception?e)?{

System.out.println(e);

}

webview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);

webview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);//設置?緩存模式

//?開啟?DOM?storage?API?功能

webview.getSettings().setDomStorageEnabled(true);

//開啟?database?storage?API?功能

webview.getSettings().setDatabaseEnabled(true);

String?cacheDirPath?=?getFilesDir().getAbsolutePath()?+?APP_CACAHE_DIRNAME;

//設置??Application?Caches?緩存目錄

webview.getSettings().setAppCachePath(cacheDirPath);

//開啟?Application?Caches?功能

webview.getSettings().setAppCacheEnabled(true);

webview.setWebChromeClient(newMChormeClient());

mWebviewClient?=newMWebviewClient(webview);

webview.setWebViewClient(mWebviewClient);

progressbar.setProgressTextColor(Color.parseColor("#29b6f6"));

textViewClose.setOnClickListener(newView.OnClickListener()?{

@Override

publicvoidonClick(View?v)?{

finish();

}

});

//?添加js交互接口類,并起別名?webtest

webview.addJavascriptInterface(this,"webtest");

webview.setWebViewClient(newMWebviewClient(webview));

}

protectedclassMWebviewClientextendsWVJBWebViewClient?{

publicMWebviewClient(WebView?webView)?{

//交互

super(webView,newWVJBHandler()?{

@Override

publicvoidrequest(Object?data,?WVJBResponseCallback?callback)?{

JSONObject?outdata?=?(JSONObject)?data;

onJsRequest(outdata);

Intent?intent?=newIntent();

try{

String?act?=?outdata.getString("act");

if(act?!=null)?{

if(act.equals("showToast"))?{

if(outdata.has("str"))?{

String?str?=?outdata.get("str").toString();

if(str?!=null)?{

showToast(str);

//????????????????????????????????????????T.showShort(CanbackWebActivity.this,str);

}

}

}elseif

}

}

}catch(JSONException?e)?{

//?TODO?Auto-generated?catch?block

e.printStackTrace();

}

}

});

jsCallJava(this);

}

//加載開始

@Override

publicvoidonPageStarted(WebView?view,?String?url,?Bitmap?favicon)?{

super.onPageStarted(view,?url,?favicon);

}

//加載完成

@Override

publicvoidonPageFinished(WebView?view,?String?url)?{

progressbar.setVisibility(View.GONE);

onLoadEnd(url);

super.onPageFinished(view,?url);

booleanisBack?=?webview.canGoBack();

if(isBack)?{

textViewClose.setVisibility(View.VISIBLE);

}else{

textViewClose.setVisibility(View.GONE);

}

//被點擊的圖片地址為:http://image.moviebuff.cn/images/201609/mem_2016-09-19-10_1474253053_99140.jpg!600-max

//動態(tài)注入js

//?這段js函數的功能就是江耀,遍歷所有的img幾點剩胁,并添加onclick函數,函數的功能是在圖片點擊的時候調用本地java接口并傳遞url過去

view.loadUrl("javascript:(function(){"+

"var?objs?=?document.getElementsByTagName(\"img\");?"+

"for(var?i=0;i

"{"

+"????objs[i].onclick=function()??"+

"????{??"

+"????????webtest.jsInvokeJava(this.src);??"+

"????}??"+

"}"+

"})()");

}

//加載失敗

@Override

publicvoidonReceivedError(WebView?view,interrorCode,?String?description,?String?failingUrl)?{

progressbar.setVisibility(View.GONE);

onLoadError(webView,?errorCode,?description,?failingUrl);

}

@Override

publicvoidonReceivedSslError(WebView?view,?SslErrorHandler?handler,?SslError?error)?{

super.onReceivedSslError(view,?handler,?error);

progressbar.setVisibility(View.GONE);

}

}

@JavascriptInterface

publicvoidjsInvokeJava(String?img)?{

Log.i("ddddddddddsss","被點擊的圖片地址為:"+?img);

}

protectedclassMChormeClientextendsWebChromeClient?{

@Override

publicvoidonProgressChanged(WebView?view,intnewProgress)?{

if(newProgress?==100)?{

progressbar.setVisibility(View.GONE);

}else{

if(progressbar.getVisibility()?!=?View.VISIBLE)?{

progressbar.setVisibility(View.VISIBLE);

}

progressbar.setProgress(newProgress);

}

super.onProgressChanged(view,?newProgress);

}

@Override

publicvoidonReceivedTitle(WebView?view,?String?title)?{

super.onReceivedTitle(view,?title);

webTitle?=?title;

setTitle(title);

}

}

@Override

publicvoidonBackPressed()?{

if(null!=?webview?&&?webview.canGoBack())?{

webview.goBack();

}else{

webview.loadUrl("about:blank");

super.onBackPressed();

}

}

@Override

publicbooleanonKeyDown(intkeyCode,?KeyEvent?event)?{

if(keyCode?==?KeyEvent.KEYCODE_BACK?&&?event.getRepeatCount()?==0)?{

webview.loadUrl("about:blank");

//webView.destroy();

onBackPressed();

returntrue;

}

returnsuper.onKeyDown(keyCode,?event);

}

privatevoidsetShareContent(String?share_text,?String?share_image,?String?share_url,?String?title)?{

finalSHARE_MEDIA[]?displaylist?=newSHARE_MEDIA[]{

SHARE_MEDIA.WEIXIN,?SHARE_MEDIA.WEIXIN_CIRCLE,

SHARE_MEDIA.QQ,?SHARE_MEDIA.QZONE

};

UMImage?localImage?=newUMImage(thisActivity,?R.drawable.ic_launcher);

newShareAction(this).setDisplayList(displaylist)

.withText(share_text)//?摘要

.withTitle(title)//?標題

.withTargetUrl(share_url)//?分享的網址

.withMedia(localImage)//?分享的圖片

.setListenerList(newUMShareListener()?{

@Override

publicvoidonResult(SHARE_MEDIA?platform)?{

T.showShort(thisActivity,"分享成功啦");

}

@Override

publicvoidonError(SHARE_MEDIA?platform,?Throwable?t)?{

T.showShort(thisActivity,"分享失敗啦");

}

@Override

publicvoidonCancel(SHARE_MEDIA?platform)?{

T.showShort(thisActivity,"分享取消了");

}

})

.open();

}

privateView?toastRoot;

privateToast?toast?=null;

privatevoidshowToast(String?msg)?{

TextView?tv?=?(TextView)?toastRoot.findViewById(R.id.TextViewInfo);

if(toast?==null)?{

toast?=newToast(CanbackWebActivity.this);

tv.setText(msg);

}else{

tv.setText(msg);

}

toast.setView(toastRoot);

toast.setGravity(Gravity.CENTER,0,0);

toast.show();

}

}

剩下就是布局文件里的webview了祥国,這個就不提供了昵观,以上僅供參考,因為所在項目的不同舌稀,部分可能需要自行改改啊犬。

csdn項目地址:http://blog.csdn.net/greatdaocaoren/article/details/54879723

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市壁查,隨后出現的幾起案子觉至,更是在濱河造成了極大的恐慌,老刑警劉巖睡腿,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件语御,死亡現場離奇詭異峻贮,居然都是意外死亡,警方通過查閱死者的電腦和手機应闯,發(fā)現死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門纤控,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碉纺,你說我怎么就攤上這事嚼黔。” “怎么了惜辑?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵唬涧,是天一觀的道長。 經常有香客問我盛撑,道長碎节,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任抵卫,我火速辦了婚禮狮荔,結果婚禮上,老公的妹妹穿的比我還像新娘介粘。我一直安慰自己殖氏,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布姻采。 她就那樣靜靜地躺著雅采,像睡著了一般。 火紅的嫁衣襯著肌膚如雪慨亲。 梳的紋絲不亂的頭發(fā)上婚瓜,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音刑棵,去河邊找鬼巴刻。 笑死,一個胖子當著我的面吹牛蛉签,可吹牛的內容都是我干的胡陪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼碍舍,長吁一口氣:“原來是場噩夢啊……” “哼柠座!你這毒婦竟也來了?” 一聲冷哼從身側響起乒验,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤愚隧,失蹤者是張志新(化名)和其女友劉穎蒂阱,沒想到半個月后锻全,有當地人在樹林里發(fā)現了一具尸體狂塘,經...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年鳄厌,在試婚紗的時候發(fā)現自己被綠了荞胡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡了嚎,死狀恐怖泪漂,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情歪泳,我是刑警寧澤萝勤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站呐伞,受9級特大地震影響敌卓,放射性物質發(fā)生泄漏。R本人自食惡果不足惜伶氢,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一趟径、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧癣防,春花似錦蜗巧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至级遭,卻和暖如春香嗓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背装畅。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工靠娱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人掠兄。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓像云,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蚂夕。 傳聞我的和親對象是個殘疾皇子迅诬,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容

  • ¥開啟¥ 【iAPP實現進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,358評論 0 17
  • 自己封裝的一個帶進度條的WebView婿牍,在此分享一下 WebView添加自定義進度條侈贷;實現緩存,有網取網絡數據,無...
    一點愁閱讀 651評論 2 2
  • public class ProgressWebView extends WebView { private Pr...
    0dce86ba3565閱讀 688評論 0 1
  • 想到視頻錄制等脂,肯定又是運用MediaRecorder俏蛮,這個類實在是方便撑蚌,但是好用的東西一定要慎重,畢竟沒有那么便宜...
    2c2z0閱讀 2,065評論 0 2
  • WebView·開車指南 2016-08-31BugDev 北京市東城區(qū)首席Bug布道師開山之作搏屑,一整月交通事故血...
    53c021c38a1d閱讀 826評論 0 1