android studio WebView的常用方法,包含网页端调用java,java调用网页,网页注入介绍
跳到APP上的浏览器上加载,就是跳出到APP外部加载
java代码部分(可以放在onCreate下)
webView = (WebView) findViewById(R.id.wv_main);
//WebView加载web资源
webView.loadUrl("http://baidu.com");//需要加载的网页
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
xml 内容(只要ID对的上,其他随便调)
<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内部页面加载
(可以直接把 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默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
view.loadUrl(url);
return true;
}});}
-----------------------------分割线--------------------------------------------
这里写的是一个 网页加载完毕后
将网页上一个id 为 MyName的 模块 隐藏掉 的示例参考代码
具体看 loadUrl里面执行的代码 有些设置记得要配置 否则会无效 而且不报错
重点是添加加载完后,往网页添加一个myFunction并且执行他,并且拿到对应模块的ElementById才能执行有效,否则JS找不到对应ID函数执行无效,这一块可以跟网页端协商添加一个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() { //网页加载完毕后 回调
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
webview.loadUrl("javascript:function myFunction(){
x=document.getElementById(\"ElementById\").style.display=\"none\";}"); //把这个js加载进网页
webview.loadUrl("javascript:myFunction()");//执行这个方法
Log.d("Tab1", webview.getUrl());
}
});
super.onActivityCreated(savedInstanceState);
}
-----------------------------分割线--------------------------------------------
JS调用Java方法(网页端调用java方面的代码)
这里给出了网页端和java的代码,核心也就是相互调用
要用的话直接娶对应的方法函数就好,留意名字ID对上一般问题不大,换成线上网页也可以,如果害怕出现沟通上的问题,可以按照如下配置在APP端自行调试后,再和网页端沟通
网页内容
<!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>标题设置</title>
<script>
function callAndroid(){
// 由于对象映射,所以调用test对象等于调用Android映射的对象
test.hello("js调用了android中的hello方法");
}
</script>
</head>
<body>
//点击按钮则调用callAndroid函数
<button type="button" id="button1" onclick="callAndroid()"></button>
</body>
</html>
java内容
/** 可以内部类 做操作 搞不懂就直接新建一个就好了 */
public class AndroidtoJs extends Object {
// 定义JS需要调用的方法
// 被JS调用的方法必须加入@JavascriptInterface注解
@JavascriptInterface
public void hello(String msg) {
System.out.println("JS调用了Android的hello方法");
}
}
webview设置
private void setWebView(){
webView = (WebView) findViewById(R.id.wv_main);
WebSettings webSettings = webView.getSettings();
// 设置与Js交互的权限
webSettings.setJavaScriptEnabled(true);
// 通过addJavascriptInterface()将Java对象映射到JS对象
//参数1:Javascript对象名
//参数2:Java对象名
webView.addJavascriptInterface(new AndroidtoJs(), "test");//AndroidtoJS类对象映射到js的test对象
// 加载JS代码
// 格式规定为:file:///android_asset/文件名.html.
webView.loadUrl("file:///android_asset/tttt.html");
}
-----------------------------分割线--------------------------------------------
HTML 另外一种调用方法
直接用HTML的样式使用
Html.fromHtml("<font col or=#333333 >" + "题目快速导航:" + "</font>" +
"<font color=#03a9f4 >" +"(共"+ requestData.size() +"题)"+ "</font>")