c android webview,Android之WebView学习

本文详细介绍了Android中WebView的使用,包括WebSettings的配置,如JavaScript支持、自适应屏幕、图片加载等;WebChromeClient和WebViewClient的设置,用于处理网页加载进度、标题显示和链接跳转;以及如何实现页面的前进、后退功能。此外,还讲解了JavaScript与Java交互的方法,包括Java调用JS和JS调用Java的示例。最后,探讨了模拟原生应用页面跳转效果的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebView常用方法

WebSettings

在使用WebView前我们都要进行相关的配置,常见的操作如下:

WebSettings settings = mWebView.getSettings();

settings.setJavaScriptEnabled(true); //支持javascript

settings.setUseWideViewPort(true); //设置webview推荐使用的窗口,使html界面自适应屏幕

settings.setLoadWithOverviewMode(true); //缩放至屏幕的大小

settings.setAllowFileAccess(true); //设置可以访问文件

// settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); //设置中等像素密度,medium=160dpi

settings.setSupportZoom(true); //设置支持缩放

settings.setLoadsImagesAutomatically(true); //设置自动加载图片

// settings.setBlockNetworkImage(true); //设置网页在加载的时候暂时不加载图片

// settings.setAppCachePath(""); //设置缓存路径

settings.setCacheMode(WebSettings.LOAD_NO_CACHE); //设置缓存模式

WebChromeClient

WebChromeClient主要是辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等。

mWebView.setWebChromeClient(new WebChromeClient() {

@Override

public void onReceivedTitle(WebView view, String title) {

super.onReceivedTitle(view, title);

mTitle.setText(title);

}

@Override

public void onProgressChanged(WebView view, int newProgress) {

super.onProgressChanged(view, newProgress);

if (newProgress == 100) {

mProgressBar.setVisibility(View.GONE);

}

mProgressBar.setProgress(newProgress);

}

});

WebViewClient

WebViewClient用来辅助WebView处理各种通知、请求事件的,例如在WebView中点击请求新的链接、页面加载开始、结束等:

mWebView.setWebViewClient(new WebViewClient() {

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

return true;

}

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

super.onPageStarted(view, url, favicon);

}

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

}

});

上\下一个页面

private void goBack(){

if (mWebView.canGoBack()){

mWebView.goBack();

}else{

finish();

}

}

private void goForward() {

if (mWebView.canGoForward()) {

mWebView.goForward();

}

}

就是通过WebView的goBack()、goForward()方法。

下载

mWebView.setDownloadListener(new DownloadListener() {

@Override

public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,

long contentLength) {

}

});

java与js交互

首先编写一个简单的H5:

js test

内容很简单,两个函数click1、click2,一个按钮,点击按钮执行click1函数。

将改H5文件放到assets目录,之后用WebView加载改H5:

mWebView.loadUrl("file:///android_asset/test.html");

接下来在Activity中编写一个特殊的类:

class JsOperation { @JavascriptInterface public void showMessage(String msg) { Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } }

然后注入到WebView中:

mWebView.addJavascriptInterface(new JsOperation(), "client");

注意和js中的这行代码对比下:

window.client.showMessage("来自js的消息");

其中client就是addJavascriptInterface()的第二个参数,当然这个参数可以自定义,但要保持一致。js中调用的showMessage()方法,就是我们JsOperation类中的方法。

点击H5中的按钮,可以看到一个Toast提示:

0818b9ca8b590ca3270a3433284dd417.png

到这里就完成了js对java代码的调用,接下来看如下通过java代码调用js。

其实很简单:

mWebView.loadUrl("javascript:click2" + "(" + 1008611 + ")");

这样就可以执行js中的click2函数了。我们通过模拟器返回键执行这行代码,可以看到一个提示框,即click2函数得到执行:

0818b9ca8b590ca3270a3433284dd417.png

模拟原生应用的页面跳转

效果

0818b9ca8b590ca3270a3433284dd417.png

首先可以在Activity的onCreate()中创建一个栈,并将当前Activity入栈:

if (mStack == null) {

mStack = new Stack<>();

}

mStack.push(this);

在WebView中继续加载新页面时:

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

Intent intent = new Intent(MainActivity.this, MainActivity.class);

intent.putExtra("url", url);

startActivity(intent);

return true;

}

我们重写了shouldOverrideUrlLoading(),重新启动当前Activity来加载新链接,则一个新的Activtiy会入栈,这样就有了跳转的效果。

在返回上一个界面时进行出栈操作:

private void popActivity() {

if (mStack.size() > 0) {

mStack.remove(this);

this.finish();

}

}

源码

参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值