1.想要加载本地HTML文件 必须在项目的src下main里面创建一个文件夹assets与java同级
在assets里面放置你要加载的HTML文件 如果没有可以创建一个myjs.html 里面的代码在下面的记不住的html里面
2.主函数
public class MainActivity extends AppCompatActivity {
private TextView tv;
private WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv= (TextView) findViewById(R.id.tv);
web= (WebView) findViewById(R.id.web);
web.loadUrl("https://hao.360.cn/");
web.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
//网页打开时 打开动画
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Toast.makeText(MainActivity.this, "正在打开中", Toast.LENGTH_SHORT).show();
}
//网页加载完成时 关闭动画
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Toast.makeText(MainActivity.this, "打开完毕", Toast.LENGTH_SHORT).show();
}
//加载页面资源时会调用的方法 每一个资源都会调用一次
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
//找不到网页时出现404 调用的方法
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
Toast.makeText(MainActivity.this, "网页找不到错误信息", Toast.LENGTH_SHORT).show();
}
//这是加载https网址时要重写的方法 不然https的访问webview会是空白
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
handler.proceed();
handler.handleMessage(null);
}
});
web.setWebChromeClient(new WebChromeClient(){
//这是获取页面加载进度
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
tv.setText(newProgress+"%");
}
//这是获取页面标题
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
Toast.makeText(MainActivity.this,title, Toast.LENGTH_SHORT).show();
}
//这是获取页面小图标
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
}
});
// //声明WebSettings子类
WebSettings ws = web.getSettings();
// ws.setSupportZoom(true);//支持缩放 默认true
// ws.setBuiltInZoomControls(true);//设置内置webview的缩放控件
// ws.setDisplayZoomControls(false);//隐藏原生的缩放控件
// //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript 这个必须写
ws.setJavaScriptEnabled(true);
//设置自适应屏幕,两者合用
ws.setUseWideViewPort(true); //将图片调整到适合webview的大小
ws.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//其他细节操作
// ws.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
// ws.setAllowFileAccess(true); //设置可以访问文件
// ws.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
// ws.setLoadsImagesAutomatically(true); //支持自动加载图片
// ws.setDefaultTextEncodingName("utf-8");//设置编码格式
}
public void cc(View view) {
switch (view.getId()) {
case R.id.but1:
if (web.canGoBack()) {
web.goBack();
}
break;
case R.id.but2:
if (web.canGoForward()){
web.goForward();
}
break;
}
}
//手机右下角的返回键的点击事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (web.canGoBack()) {
web.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
3.主布局
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
android:layout_width="match_parent" android:layout_height="match_parent"
tools:context="comqq.example.hasee.myapplication.MainActivity"
android:orientation="vertical">
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/but1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上"
android:onClick="cc"/>
<Button
android:id="@+id/but2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下"
android:onClick="cc"/>
</LinearLayout>
<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</LinearLayout>
4.js交互和HTML点击事件 记不住的html
<html>
<head>
<title> Android和JS的交互 </title>
<meta charset="utf-8">
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script type="text/javascript">
function callJS(){
alert("弹出对话框");
}
function testconfirm(){
var r= confirm("您确定要离开么?");
alert(r);
}
function testprompt(){
var name = prompt("请输入用户名","admin");
alert(name);
}
</script>
</head>
<body>
<input type="button" value="按钮一" onClick="callJS()"/>
<input type="button" value="按钮二" onClick="testconfirm()"/>
<input type="button" value="按钮三" onClick="testprompt()"/>
<input type="button" value="点击调用android代码并传递参数"
onclick="window.Android.startFunction('js传递给android的参数')"/>
<br>
<font color="red" size="5">生者为过客,死者为归人。</font>
<br>
<font color="green" size="5">天地一逆旅,同悲万古尘。</font>
</body>
</html>
5.创建一个类 diao
public class JSInterface{
private Context context;
public JSInterface(Context context) {
this.context = context;
}
// 在js当中调用以下方法,需要加注解@JavascriptInterface
@JavascriptInterface
public String startFunction(String str){
Toast.makeText(context,str+"不要看洛克王国,嗯哼!!",Toast.LENGTH_LONG).show();
return "abcdefg";
}
}
6.主函数
public class MainActivity extends AppCompatActivity {
private WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
web= (WebView) findViewById(R.id.web);
WebSettings set = web.getSettings();
// 设置与Js交互的权限
set.setJavaScriptEnabled(true);
// 设置允许JS弹窗
set.setJavaScriptCanOpenWindowsAutomatically(true);
web.loadUrl("file:///android_asset/myjs.html");
web.setWebChromeClient(new WebChromeClient());
// 让此界面当中的webview的js调用android的代码
web.addJavascriptInterface(new JSInterface(this),"Android");
}
public void cc(View view) {
switch (view.getId()) {
case R.id.but1:
web.loadUrl("javascript:callJS()");
break;
case R.id.but2:
// web.evaluateJavascript("javascript:testconfirm()", new ValueCallback<String>() {
// @Override
// public void onReceiveValue(String s) {
// Toast.makeText(MainActivity.this, s+"qqq", Toast.LENGTH_SHORT).show();
// }
// });
break;
}
}
}