从简单到复杂教你如何使用webview

本文介绍如何在Android应用中使用WebView加载网页,包括基本配置、开启JavaScript支持、设置缩放控件及监听页面加载过程等高级功能。

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

很多时候我们在开发程序的时候 为了方便 ,我们在做页面的时候 会采用webview直接加载页面的方式, 尤其是在大量的新闻展示页面的时候,那么 webview 到底该如何使用呢,下面我们就将从浅入深的 教大家 如何使用webview.

  首先 先布置一下 布局文件

代码为:

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.tdcq.webviewdemo.MainActivity">

   <WebView
       android:id="@+id/webview"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content">

   </WebView>
</RelativeLayout>

然后 在编写java代码

 首先先从简单的方式入手

public class MainActivity extends Activity {

  
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mWebView = (WebView) findViewById(R.id.webview);
//        开始加载网页
        mWebView.loadUrl("http://www.baidu.com");
}

看似很难的 webview  实际 就是这么简单  , 但是不要忘了在清单文件中 加上下面的 权限

<uses-permission android:name="android.permission.INTERNET"/>

----------------------------------------------------------------------------------------------------------------------------------------------------

上面是  一个简单的代码 示例   那么下面我们将主键的 深层次的 了解 webview

由于系统默认是禁止掉JavaScript控件的 因为js有一定的安全风险, 弄不好会出问题

但是不开启又会出现一个很奇怪的问题,就是有些按钮点了没反应。因为很多网页的控件是通过JS编写的,关闭时无法响应JS控件。

开启后 就可以点击 , 也看到 弹出的 广告 和 网站轮播图 相关的一些效果了

代码如下:

WebSettings setting   = mWebView.getSettings();
setting.setJavaScriptEnabled(true);

还可以添加一些其他的 辅助功能

//植入一个缩放的控制 , 显示放大缩小的按钮
setting.setBuiltInZoomControls(true);
//双击缩放
setting.setUseWideViewPort(true);

----------------------------------------------------------------------------------------------------------------------------------------------------


//还可以给webview 设置一个监听 让其点击之后不自动跳转到浏览器
//此监听就是整个webview的 一个生命周期
mWebView.setWebViewClient(new WebViewClient(){
    //当页面开始加载的时候
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        System.out.println("页面开始加载了..........");
    }
    //当页面跳转的时候
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //当跳转的时候页面会返回一个url
        System.out.println("跳转连接:" + url);
     // 此时返回的  return super.shouldOverrideUrlLoading(view, url) 会判断当前跳转到哪里
     //通常是跳转到浏览器的  , 为了让其在当前的webview 来加载的话
        //可以更改返回的代码

  //      mWebView.loadUrl(url); //让其直接在当前webview 显示链接地址中的内容

		监听页面 是否有电话号码 有的话 就拨打 电话 
              if (url.startsWith("tel:")){
                    Intent intent = new Intent(Intent.ACTION_VIEW,
                            Uri.parse(url));
                    startActivity(intent);
                    return true;
                }

//                else if(url.startsWith("http:") || url.startsWith("https:")) {
//                    view.loadUrl(url);
//                }

//		发送短信的 方法

		
if (url.startsWith("sqwems:")) {
    Uri uri = Uri.parse(url);   // url : 的格式为  "smsto:18888888888"
    Intent intent = new Intent(Intent.ACTION_SENDTO, uri); 
   intent.putExtra("sms_body", "android...");  
  startActivity(intent);    return true;}
//	需要加上下面的 两个权限
//<uses-permission android:name="android.permission.CALL_PHONE" />
//<uses-permission android:name="android.permission.SEND_SMS"/>
return true; //不让其判断 直接返回 }
   //当页面加载结束的时候  
  @Override  
  public void onPageFinished(WebView view, String url) {      
  System.out.println("页面加载结束了..........");      
  super.onPageFinished(view, url);    }});

-------------------------------------------------------------------------------------------------------------------------------------------------------------


为了更好的体验  在加载的时候  有个提示
mWebView.setWebChromeClient(new WebChromeClient(){
    //获取网页标题
    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);
        System.out.println("页面标题 : " +title);
    }
    //进度发生变化
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        super.onProgressChanged(view, newProgress);
        System.out.println("加载进度 : " +newProgress);
    }
});

----------------------------------------------------------------------------------------------------------------------------------------------------------

以上代码 了解之后   还有一个 小细节  就是
当我们 在 点击返回键的时候  系统会将当前的 activity  finish 掉
为了 更好的 体验 在点击返回键的时候 返回的 是上一个页面
可以重写返回键
 @Override
    public void onBackPressed() {
     //   mWebView.goBack(); 返回上一页
        //但是在返回到第一页的时候 要将当前的activity关闭掉
        //而 goBack 无法 关闭 activity  所以 需要做一个判断
        if(mWebView.canGoBack()){ //判断是否能返回
            mWebView.goBack();  //返回

 还可以增加一个跳转按钮  在这里 就不过多演示了  感兴趣的朋友可以自己增加

//            mWebView.goForward(); //跳到下一个网页 但是前提是之前浏览过,要有历史记录
//            mWebView.canGoForward();  //判断能否跳到下一页
        }else{
            finish();//关闭当前页面
        }
    }

代码下载 : http://download.youkuaiyun.com/detail/q9104422999/9627562



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值