android studio WebView的常用方法,包含網(wǎng)頁(yè)端調(diào)用java,java調(diào)用網(wǎng)頁(yè),網(wǎng)頁(yè)注入介紹
跳到APP上的瀏覽器上加載,就是跳出到APP外部加載
java代碼部分(可以放在onCreate下)
webView = (WebView) findViewById(R.id.wv_main);
//WebView加載web資源
webView.loadUrl("http://baidu.com");//需要加載的網(wǎng)頁(yè)
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
xml 內(nèi)容(只要ID對(duì)的上,其他隨便調(diào))
<WebView
? ? android:id="@+id/wv_main"
? ? android:layout_width="match_parent"
? ? android:layout_height="match_parent"
? ? android:layout_centerHorizontal="true"
? ? android:layout_centerVertical="true" />
-----------------------------分割線--------------------------------------------
在app內(nèi)部頁(yè)面加載
(可以直接把? ??initWebView()? ?放在onCreate下)
private void initWebView(){
webView = (WebView) findViewById(R.id.wv_main);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
//WebView加載web資源
webView.loadUrl("http://baidu.com");
//覆蓋WebView默認(rèn)使用第三方或系統(tǒng)默認(rèn)瀏覽器打開(kāi)網(wǎng)頁(yè)的行為,使網(wǎng)頁(yè)用WebView打開(kāi)
webView.setWebViewClient(new WebViewClient(){
? ?@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
? ? // TODO Auto-generated method stub
? ? ? ?//返回值是true的時(shí)候控制去WebView打開(kāi),為false調(diào)用系統(tǒng)瀏覽器或第三方瀏覽器
? ? ?view.loadUrl(url);
? ? return true;
}});}
-----------------------------分割線--------------------------------------------
這里寫的是一個(gè) 網(wǎng)頁(yè)加載完畢后?
將網(wǎng)頁(yè)上一個(gè)id 為 MyName的 模塊 隱藏掉 的示例參考代碼
具體看 loadUrl里面執(zhí)行的代碼? 有些設(shè)置記得要配置 否則會(huì)無(wú)效 而且不報(bào)錯(cuò)
重點(diǎn)是添加加載完后,往網(wǎng)頁(yè)添加一個(gè)myFunction并且執(zhí)行他,并且拿到對(duì)應(yīng)模塊的ElementById才能執(zhí)行有效,否則JS找不到對(duì)應(yīng)ID函數(shù)執(zhí)行無(wú)效,這一塊可以跟網(wǎng)頁(yè)端協(xié)商添加一個(gè)ID
?@Override
? ? public void onActivityCreated(Bundle savedInstanceState) {
? ? ? ? setListener();
? ? ? ? webSettings = webview.getSettings();
? ? ? ? webSettings.setJavaScriptEnabled(true);
? ? ? ? webSettings.setUseWideViewPort(true);
? ? ? ? webSettings.setLoadWithOverviewMode(true);
? ? ? ? webview.setWebViewClient(new MyWebViewClient());
? ? ? ? webview.setWebViewClient(new WebViewClient() {
? ? ? ? ? ? public boolean shouldOverrideUrlLoading(WebView view, String url) {
? ? ? ? ? ? ? ? view.loadUrl(url);
? ? ? ? ? ? ? ? return true;
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? // 啟用javascript
? ? ? ? webview.getSettings().setJavaScriptEnabled(true);
? ? ? ? webview.setWebViewClient(new WebClineView() {? //網(wǎng)頁(yè)加載完畢后 回調(diào)
? ? ? ? ? ? @Override
? ? ? ? ? ? public void onPageFinished(WebView view, String url) {
? ? ? ? ? ? ? ? super.onPageFinished(view, url);
? ? ? ? ? ? ? ? webview.loadUrl("javascript:function myFunction(){
? ? ? ? ? ? ? x=document.getElementById(\"ElementById\").style.display=\"none\";}"); //把這個(gè)js加載進(jìn)網(wǎng)頁(yè)
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? webview.loadUrl("javascript:myFunction()");//執(zhí)行這個(gè)方法
? ? ? ? ? ? ? ? Log.d("Tab1", webview.getUrl());
? ? ? ? ? ? }
? ? ? ? });
? ? ? ? super.onActivityCreated(savedInstanceState);
? ? }?
-----------------------------分割線--------------------------------------------
JS調(diào)用Java方法(網(wǎng)頁(yè)端調(diào)用java方面的代碼)
這里給出了網(wǎng)頁(yè)端和java的代碼,核心也就是相互調(diào)用
要用的話直接娶對(duì)應(yīng)的方法函數(shù)就好,留意名字ID對(duì)上一般問(wèn)題不大,換成線上網(wǎng)頁(yè)也可以,如果害怕出現(xiàn)溝通上的問(wèn)題,可以按照如下配置在APP端自行調(diào)試后,再和網(wǎng)頁(yè)端溝通
網(wǎng)頁(yè)內(nèi)容
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>標(biāo)題設(shè)置</title>
? ? <script>
? ? ? ? ?function callAndroid(){
? ? ? ? // 由于對(duì)象映射,所以調(diào)用test對(duì)象等于調(diào)用Android映射的對(duì)象
? ? ? ? ? ? test.hello("js調(diào)用了android中的hello方法");
? ? ? ? ?}
? ? ? </script>
</head>
<body>
//點(diǎn)擊按鈕則調(diào)用callAndroid函數(shù)
<button type="button" id="button1" onclick="callAndroid()"></button>
</body>
</html>
java內(nèi)容
? ? /** 可以內(nèi)部類 做操作 搞不懂就直接新建一個(gè)就好了 */
public class AndroidtoJs extends Object {
? ? // 定義JS需要調(diào)用的方法
? ? // 被JS調(diào)用的方法必須加入@JavascriptInterface注解
? ? @JavascriptInterface
? ? public void hello(String msg) {
? ? ? ? System.out.println("JS調(diào)用了Android的hello方法");
? ? }
}
webview設(shè)置
? ? private void setWebView(){
? ? ? ? webView = (WebView) findViewById(R.id.wv_main);
? ? ? ? WebSettings webSettings = webView.getSettings();
? ? ? ? // 設(shè)置與Js交互的權(quán)限
? ? ? ? webSettings.setJavaScriptEnabled(true);?
? ? ? ? // 通過(guò)addJavascriptInterface()將Java對(duì)象映射到JS對(duì)象
? ? ? ? //參數(shù)1:Javascript對(duì)象名
? ? ? ? //參數(shù)2:Java對(duì)象名
? ? ? ? webView.addJavascriptInterface(new AndroidtoJs(), "test");//AndroidtoJS類對(duì)象映射到j(luò)s的test對(duì)象
? ? ? ? // 加載JS代碼
? ? ? ? // 格式規(guī)定為:file:///android_asset/文件名.html.
? ? ? ? webView.loadUrl("file:///android_asset/tttt.html");
? ? }
-----------------------------分割線--------------------------------------------
HTML 另外一種調(diào)用方法
直接用HTML的樣式使用
Html.fromHtml("<font col or=#333333 >" + "題目快速導(dǎo)航:" + "</font>"? +
? ? ? ? ? ? ? ? "<font color=#03a9f4 >" +"(共"+ requestData.size() +"題)"+ "</font>")