webview代码实例化_WebView常用类和基本方法详解

本文详细介绍了WebView的三个关键组件:WebSettings、WebViewClient和WebChromeClient,包括它们的基本方法和应用场景。通过实例展示了如何显示网页标题、开始加载提示、结束加载提示以及实时加载进度。此外,还强调了利用WebView子类方法优化性能和安全性的潜力。
摘要由CSDN通过智能技术生成
上一篇文章我们实现了一个简单的WebView,并且能够在程序中的不调用浏览器进行网页的展示和浏览,Android给WebView提供了一些子类,其子类下的方法能够让我们的WebView功能更加完善、性能更加的强大,接下来我们就一起来学习WebView常用的三大子类。 WebView三大子类:
  1. WebSettings:主要是对WebView进行管理配置
  2. WebViewClient:处理请求、通知事件
  3. WebViewChromeClient:帮助WebView处理网站的JS的相关信息

我们在上篇文章实现WebView时,使用了一个setJavaScriptEnabled( )方法来支持JavaScript脚本,这个方法就是属于WebSettings类,下面我们通过在WebView中添加这些子类中的常用方法,来了解并掌握其用法和应用场景。

1、WebSettings类

  • webView.getSettings( ):创建WebSettings对象

  • setJavaScriptEnabled(true):WebView支持JavaScript

  • setPluginEnabled(true):WebView支持插件

  • setSupportZoom(true):WebView支持缩放

  • setAllowFileAccess(true):WebView能够访问文件

  • setLoadsImageAutomatically(true):支持自动加载图片

2、WebViewClient类

  • shouldOverrideUrlLoading( ):WebView打开网页,不调用浏览器

  • onPageStarted( ):开始载入页面时调用该方法,可以设置Loading等待页面

  • onPageFinished( ):结束页面加载时调用,可以设置关闭Loading条,等动作

3、WebChromeClient类

  • onProgressChanged( ):获取网页的加载进度

  • onReceivedTitle( ):获取网页的标题

以上就是一些比较基本常用的方法,当然,WebView子类中的方法很多,大家可以根据应用需求去相应的类中查看使用方法(Ctrl+点击类名)。

下面来实现一个实例:获取并显示网页的标题、开始、结束加载提示和显示加载进度。

新建一个ACtivity,首先我们来写布局文件,在Activity的布局文件中我们添加4个TextView控件,分别用于显示通过WebView下相应的方法获取到的网页标题、开始加载提示、结束加载提示,加载进度。再添加一个WebView控件,布局代码如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    android:gravity="center">    <TextView        android:id="@+id/tv_title"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#D52B2B"        android:layout_marginTop="10dp" />    <TextView        android:id="@+id/tv_start"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#D52B2B"        android:layout_marginTop="10dp" />    <TextView        android:id="@+id/tv_progress"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#D52B2B"        android:layout_marginTop="10dp" />    <TextView        android:id="@+id/tv_end"        android:gravity="center"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:textColor="#D52B2B"        android:layout_marginTop="10dp"        android:layout_marginBottom="10dp"/>    <WebView        android:id="@+id/webView"        android:layout_width="match_parent"        android:layout_height="match_parent" />LinearLayout>

布局好之后我们再回到Activity的java文件中,来声明找到控件,并通过WebView子类中的方法获实现我们需要显示的网页信息,代码如下:

public class WebView_Activity extends AppCompatActivity {    private WebView mWebView;    private TextView mTvStart,mTvProgress,mTvEnd,mTvTitle;    @SuppressLint("SetJavaScriptEnabled")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_web_view_);        mWebView = findViewById(R.id.webView);        mTvStart = findViewById(R.id.tv_start);        mTvProgress = findViewById(R.id.tv_progress);        mTvEnd = findViewById(R.id.tv_end);        mTvTitle = findViewById(R.id.tv_title);        mWebView.getSettings().setJavaScriptEnabled(true);        mWebView.loadUrl("https://m.sogou.com/");        mWebView.setWebViewClient(new WebViewClient(){            @Override            public void onPageStarted(WebView view, String url, Bitmap favicon) {                super.onPageStarted(view, url, favicon);                mTvStart.setText("开始加载");            }            @Override            public void onPageFinished(WebView view, String url) {                super.onPageFinished(view, url);                mTvEnd.setText("加载结束");            }        });        mWebView.setWebChromeClient(new WebChromeClient(){            @Override            public void onProgressChanged(WebView view, int newProgress) {                super.onProgressChanged(view, newProgress);                if (newProgress < 100){                    String progress = newProgress + "%";                    mTvProgress.setText(progress);                }else{                    mTvProgress.setText("100%");                }            }            @Override            public void onReceivedTitle(WebView view, String title) {                super.onReceivedTitle(view, title);                mTvTitle.setText(title);            }        });    }    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        // 如果按下的按键是返回键并且webView可以返回,就执行webView返回        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {            mWebView.goBack();            return true;        }        return super.onKeyDown(keyCode, event);    }}

上面代码中声明控件的代码不做解释,都是最基础的代码,我们先是通过连写的方式使用方法mWebView.getSettings().setJavaScriptEnabled(true)使WebView支持JavaScript,接着在setWebViewClient方法中通过匿名内部类的方法来重写WebViewClient子类中的方法:

  • onPageStarted:重写该方法,在调用该方法时,文本框中显示"开始加载"的提示信息

  • onPageFinished:重写该方法,在网页加载结束时,文本框中提示"加载结束"提示

接着通过setWebChromeClient方法,也是使用内部类的方式来添加WebChromeClient子类,并重写其中的显示加载进度的方法:

  • onProgressChanged:该方法就是用于获取网页加载进度,在该方法中,我们通过if、else语句判断,当前加载进度小于100时,会通过setText方法在TextView中显示当前的加载进度,其中newProgress就是当前的加载进度,否则显示100%

  • onReceivedTitle:这个方法是用于获取当前网页的标题,再拖setText方法将获取到的标题在TextView中显示出来。

最后通过重写onKeyDown方法,实现点击"Back"键返回前一个页面,在上篇文章中我们有详细的讲解。到这里为止,我们实例的需求都实现了,分别为显示网页标题,提示开始加载、结束加载信息,显示实时的加载进度。我们来运行程序,查看一下运行结果。如下图:

c2b10aa87b465434b1d55894c8fb0d58.gif

观察运行结果,我们能看到,当程序启动时,会在页面的顶部显示当前网页的标题,当网页开始加载时,会显示"开始加载"提示,在网页加载中,会显示实时的百分比加载进度,最后网页加载结束,会显示"加载结束"文字。而且我们能发现,当打开一个新页面时,上面这些信息会显示新加载页面的信息。

通过上面简单的实例我们能发现,使用WebView子类中的方法能让我们直观的了解更多的网页信息,我们还可以使用其子类中的其他方法提高WebView的性能和安全性,防止内存泄漏等。后续的文章我们会通过一些实例来实现。

获取更多的Android学习知识和信息,请关注我们的微信公众号:秉空课堂

194e73700fa6460b18c59c57ceaa4f7a.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值