今天主要写一下WebView,主要是在安卓应用的页面来加载或者写入网页,是比较常见的一种操作。
加载网页
1.加载url(网络或者本地assets文件下的html文件)
(1)加载网络url
webview.loadUrl("相应的网址");
直接在activity直接加载网络地址即可使用
对应的activity代码如下:
public class WebViewActivity extends AppCompatActivity {
WebView wb1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
wb1=findViewById(R.id.wb1);
wb1.getSettings().setJavaScriptEnabled(true);
wb1.loadUrl("https://m.baidu.com");
//加载网络html
}
}
效果如图所示:
(2)加载本地assets文件下的html文件
webview.loadUrl("相应的文件地址");
注意:直接在main文件夹下面新建一个folder,如图,然后在生成的文件夹下面写进html文件
在新建的写入一个html
代码如下:
<html>
hello world
</html>
然后在对应的activity中加载文件
public class WebViewActivity extends AppCompatActivity {
WebView wb1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
wb1=findViewById(R.id.wb1);
wb1.loadUrl("file:///android_asset/hello.html");
//加载本地html文件hello.html
}
}
对于文件地址的选取,按照上面的来即可,只不过html的文件名因人而异,其他一致
2.加载html代码
webview.loadData();
或者webview.loadDatawithBaseUrl();
3.native和JavaScript相互调用
网页的前进后退
(1)网页是可以返回的webview.canGoBack()
(2)网页进行返回webview.goBack()
(3)网页是可以前进的webview.canGoForward()
(4)网页进行前进webview.goForward()
(5)网页是可以返回或者前进steps步的webview.canGoBackOrForward(int steps)
(6)网页返回或者前进steps步webview.goBackOrForward(int steps)
返回问题:对于进入某个页面之后欧需要返回到上一界面,但是返回之后直接退出了当前的activity,需要重新定义函数
onKeyDown函数 代码如下:
package com.example.scrollview;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewActivity extends AppCompatActivity {
WebView wb1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
wb1=findViewById(R.id.wb1);
wb1.getSettings().setJavaScriptEnabled(true);
wb1.loadUrl("https://m.baidu.com");
//加载网络html
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK&&wb1.canGoBack()){
wb1.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
还有一些常用的函数,需要调用类,具体看代码注解,只有部分常用函数的说明
package com.example.scrollview;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class WebViewActivity extends AppCompatActivity {
WebView wb1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
wb1=findViewById(R.id.wb1);
//wb1.loadUrl("file:///android_asset/hello.html");
//加载本地html文件hello.html
wb1.setWebViewClient(new MyWebViewClient()); //调用类
wb1.setWebChromeClient(new MyWebChromeClient()); //调用类
wb1.getSettings().setJavaScriptEnabled(true);
wb1.loadUrl("https://m.baidu.com");
//加载网络html
}
class MyWebViewClient extends WebViewClient{
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
@Override
//在网络页面加载之前调用的函数
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d("webview","onPageStarted");
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
//在网络页面加载之后调用的函数
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d("webview","onPageStarted");
//wb1.loadUrl("javascript:alert('hello')");
wb1.evaluateJavascript("alert('hello')",null); //jsp代码调用
}
}
class MyWebChromeClient extends WebChromeClient{
@Override
//进度条变化调用的函数
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
// 网页标题接收的函数
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
setTitle(title);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK&&wb1.canGoBack()){
wb1.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}