android web view的学习 2 通过WebChomeClient 实现进度条和title,通过WebViewClient 来进行url的拦截,和javascript的交互

Android WebView使用案例与实战指南 在移动应用开发的世界里,WebView组件是一个不可或缺的角色。它可以看作是一个简化的浏览器,嵌入到应用程序中,用于显示网页内容。这对于开发者来说,意味着能够利用网页技术来扩展应用的功能,而无需对原生代码有深入了解。在声明WebView组件时,可以设置多个属性来定制其行为。以下是一些常用的属性及其说明:和:分别用来设置WebView组件的宽度和高度。:用来指定一个WebView的设置对象,其中可以进行一些高级配置,比如启用或禁用JavaScript支持、设置缩放模式等。 阅读详情

android webview demo    

WebView 包含了浏览网页功能空间
     WebViewClient WebView 网页加载的处理器,例如加载开始,加载结束
     WebChromeClient:侧重于WebView 处理界面部分的功能,例如显示进度条,对话框,标题
     WebSettings,WebView的设置
     JS的支持,类和注解


PS: 如果需要设置缩放比例:webview.setInitialScale(150); 

webView 设置缩放比例



首先自定义一个接口,

package com.example.administrator.webviewdemo;

/**
 * Created by Administrator on 2016/8/18.
 */
public interface WebSupport {
    void updateProgress(int progress);
    void updateTitle(String title);
}

自定义一个MyWebChromeClient,

package com.example.administrator.webviewdemo;

import android.webkit.WebChromeClient;
import android.webkit.WebView;

/**
 * Created by Administrator on 2016/8/18.
 */
public class MyWebChromeClient extends WebChromeClient {
    WebSupport webSupport;

    public MyWebChromeClient(WebSupport webSupport) {
        this.webSupport = webSupport;
    }

    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        //super.onProgressChanged(view, newProgress);
        webSupport.updateProgress(newProgress);
    }

    @Override
    public void onReceivedTitle(WebView view, String title) {
//        super.onReceivedTitle(view, title);
        webSupport.updateTitle(title);
    }
}


拦截特定的url

自定义WebViewClient,

package com.example.administrator.webviewdemo;

import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.util.Log;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * Created by Administrator on 2016/8/18.
 */
public class MyWebViewClient extends WebViewClient {
    Context context;

    public MyWebViewClient(Context context) {
        this.context = context;
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
        return super.shouldOverrideUrlLoading(view, request);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        boolean ret = super.shouldOverrideUrlLoading(view, url);

        if(url.indexOf("58.com")>0) {
            ret = true;
            try {
                URL  u = new URL(url);
                Log.d("kodulf", "login");
                view.loadUrl("http://www.ganji.com");
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        }else if(url.startsWith("tel:")){
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse(url));
            context.startActivity(intent);
            ret = true;
        }else if(url.startsWith("smsto://")){
            Intent intent = new Intent(Intent.ACTION_SENDTO);
            intent.setData(Uri.parse(url));
            context.startActivity(intent);
            ret = true;
        }

        return ret;
    }

    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
    }
}

与javaScipt的交互:

在我们的main的文件夹下面,创建一个assets的文件夹,然后创建一个index.html的文件

<html>
<head>

    <script type="application/javascript">

        //1.创建方法,有一个js 要调用必须要有JavaScriptInterface

        function callAndroid(msg){

            //调用Android 代码
            //window内部的对象都是有WebView(WebKit)来创建的
            //如果使用WebView addJavaScriptInterface(Object,String)
            //调用的这个方法,就能够将Object 对象,添加到JS的window中
            //引用的时候,使用String 参数的内容作为对象名
            //如果string=“hello” 那么就可以调用window.hello

            //本例,使用Android
            window.Android.showToast(msg);
        }

        function exitApp(){
            window.Android.exitApp();
        }

        //获取Java内部的数据,只要Java 方法,返回字符串就可以了
        //获取当前的手机的类型
        function getDevice(){
            //var device = window.Android.getDevice();
            //document.write("phone type="+device);
            document.write("phone type="+"hello");
        }

    </script>
</head>
<body>
<a href="http://m.58.com">跳到58</a>

<a href="tel://13391531070">打电话</a>

<a href="smsto://13391531070">发短息</a>

<button title="js 吐司" value="js 吐司"  onclick="callAndroid('toast')">click me and Toast</button>

<button title="退出" value="退出"  onclick="exitApp()">点击退出</button>

<button title="获取手机类型" value="获取手机类型"  onclick="getDevice()">获取手机类型,通过Android来获取,然后设置到js中</button>
</body>
</html>

创建一个接口:

package com.example.administrator.webviewdemo;

import android.content.Context;
import android.os.Build;
import android.webkit.JavascriptInterface;
import android.widget.Toast;

/**
 * Created by Administrator on 2016/8/18.
 */
public class JsSupport {
    public Context context;

    public JsSupport(Context context) {
        this.context = context;
    }

    //TODO 一定一定要记住了,方法要是注解,并且是public 的不然是不能够被调用到的,而且会报错:Uncaught TypeError: window
    @JavascriptInterface
    public void showToast(String msg){
        if(msg!=null){
            Toast.makeText(context,msg,Toast.LENGTH_LONG).show();
        }
    }

    //TODO 一定一定要记住了,方法要是注解,并且是public 的不然是不能够被调用到的,而且会报错:Uncaught TypeError: window
    @JavascriptInterface
    public void exitApp(){
        System.exit(0);
    }

    //TODO 一定一定要记住了,方法要是注解,并且是public 的不然是不能够被调用到的,而且会报错:Uncaught TypeError: window
    @JavascriptInterface
    public String getDevice(){
        return Build.DEVICE;
    }


}


MainActivity:

package com.example.administrator.webviewdemo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

import java.net.MalformedURLException;
import java.net.URL;
//
//public class MainActivity extends AppCompatActivity {
//
//    @Override
//    protected void onCreate(Bundle savedInstanceState) {
//        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_main);
//        WebView webView = (WebView)findViewById(R.id.webView);
//        //必须要设置loadUrl里面的是http 开头的
//        //webView.setWebViewClient(new WebViewClient());
//        //webView.loadUrl("http://www.baidu.com");
//        //
//        //String data ="<html><body>我是网页</br><img width=800 src=\"http://www.pptbz.com/pptpic/UploadFiles_6909/201204/2012041411433867.jpg\"/></body></html>";
//        String data ="<html><head><style>img{width:50% height =50%}</style></head><body>我是网页</br><img src=\"http://www.pptbz.com/pptpic/UploadFiles_6909/201204/2012041411433867.jpg\"/></body></html>";
//        webView.loadData(
//                data,
//                "text/html;charset=UTF-8",
//                null
//        );
//
//        //webView图片显示的问题,需要进行适配,需要客户端和服务器人员一起开发,服务器中的网页,不允许有尺寸。客户端需要使用css 控制图片的尺寸
//        //通用规则,服务器返回的html 只是片段,没有《html》《body》《/body》</html> 只有内容,客户端需要手动的添加图片屏幕适配的内容
//        //使用css来控制所有图片的适配;使用style 标签来定义图片的样式
//    }
//}


public class MainActivity extends AppCompatActivity implements WebSupport {

    /**
     WebView 包含了浏览网页功能空间
     WebViewClient WebView 网页加载的处理器,例如加载开始,加载结束
     WebChromeClient:侧重于WebView 处理界面部分的功能,例如显示进度条,对话框,标题
     WebSettings,WebView的设置
     JS的支持,类和注解
     */
    private WebView webView;
    private ProgressBar progressbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView);
        progressbar=(ProgressBar)findViewById(R.id.progressbar);
        progressbar.setMax(100);


        //如果是上面的直接loadUrl的话,会调用我们系统的浏览器去打开上面的网址,有了下面的webviewclient的设置,会在我们的应用中打开
//        webView.setWebViewClient(new WebViewClient(){
//            @Override
//            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//                view.loadUrl(url);
//                //return super.shouldOverrideUrlLoading(view, url);
//                return true;
//            }
//        });

        webView.setWebViewClient(new MyWebViewClient(this));

        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);
        settings.setDomStorageEnabled(true);
        //settings.setTextZoom(150);
        settings.setDisplayZoomControls(true);
        settings.setDefaultFontSize(32);

//        webView.setWebChromeClient(new WebChromeClient(){
//            @Override
//            public void onProgressChanged(WebView view, int newProgress) {
//                super.onProgressChanged(view, newProgress);
//                Log.d("kodulf","当前的进度"+newProgress);
//
//            }
//        });

        webView.setWebChromeClient(new MyWebChromeClient(this));

        //开启Js调用java代码的功能
        //参数2,就是添加JS 中的window内部的对象
        //
        webView.addJavascriptInterface(new JsSupport(this),"Android");


        //有两种方法,一种是直接的loadUrl,另一种是加载源码
        //webView.loadUrl("http://m.58.com");//注意了,这里如果输入www.baidu.com的话有可能就打不开了

        //我们将网页放在assets的目录下面,记住了
        //TODO 记住了file .后面是三个/// 然后路径名是android_asset
        webView.loadUrl("file:///android_asset/index.html");

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //return super.onKeyDown(keyCode, event);

        if(keyCode== KeyEvent.KEYCODE_BACK){
            if(webView.canGoBack()){
                webView.goBack();
                return true;
            }else{
                System.exit(0);//推出程序
            }
        }
        return super.onKeyDown(keyCode, event);
    }


    @Override
    public void updateProgress(int progress) {
        progressbar.setProgress(progress);
    }

    @Override
    public void updateTitle(String title) {
        setTitle(title);
    }
}




Android混合开发之webview的demo Android中webview的基础使用,其中包括androud——button和js的互相响应,基础学习使用 立即下载

相关推荐

android webview demo

android webview demo 。 用法参考:http://blog.youkuaiyun.com/zircon_1973/article/details/8067041

安卓中WebView和原生的通信示例Demo(含完整源码)

安卓中原生和WebView的通信方式,附有完整的源码,方便参考学习。

英勇的博客 4009

别再手动跑定时任务了!Spring Boot项目5分钟集成xxl-job保姆级教程(含Docker部署调度中心)

本文提供Spring Boot项目快速集成xxl-job的保姆级教程,包括Docker部署调度中心的详细步骤。通过实战案例展示如何构建企业级分布式任务调度系统,解决传统定时任务的资源竞争、单点故障等问题,提升开发效率与系统可靠性。

weixin_30315905的博客 291

android---WebView实例

以 api 添加的模块之间的依赖是向下传递的,即 app 中依赖 WebView, WebView 中依赖 common, common 中依赖 base,那么 app 中就能依赖到 common 和 base。要满足组件化的需求,WebView 里打开网页的操作我们要给其它组件或者 app 模块使用,所以我们要在 common 层写一个接口,然后在 WebView 模块把这个接口实现,其它组件就能通过 common 层的接口在 WebView 模块中找到实现,这种方法称为。那么这种该如何实现呢?

qq_44950283的博客 1509

无线自组织网络基础知识

参考书籍:《无线自组织网络路由协议及应用》 目录第一章 绪论1.1 无线自组织网络概述1.1.1 无线自组织网络的定义及分类1.1.2无线自组织网络的主要特点1.1.3无线自组织网络的应用与发展1.无线自组织网络的应用2.无线自组织网络的起源和发展1.2典型的无线自组织网络1.2.1移动Ad Hoc网络1、移动Ad Hoc网络的定义2.移动AdHoc网络的特点3.移动Ad Hoc网络的应用1.2....

逸凌Time 2万+

Aveva Marine C# 二次开发入门001

1# 引用 C:\AVEVA\Marine\OH12.1.SP4\Aveva.ApplicationFramework.dll C:\AVEVA\Marine\OH12.1.SP4\Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.ApplicationFramework.Presentation;usi...

weixin_30245867的博客 1911

Android的WebView简单使用实例(附Demo)

Demo地址:https://github.com/zGuangYuan/Androidstudio_example   WebView介绍: Android WebView在Android平台上是一个特殊的View, 基于webkit引擎、展现web页面的控件,这个类可以被用来在你的app中仅仅显示一张在线的网页,还可以用来开发浏览器。WebView内部实现是采用渲染引擎来展示view的...

广源的博客 3万+

WorkBuddy Skill赋能HYSYS与Comsol:AI工作台下的仿真自动化实践

AI Agent正将工业软件自动化带向新高度。在工程仿真领域,流程模拟与多物理场分析常因重复性操作而效率低下,Aspen HYSYS的批量工况调整、Comsol的参数扫描与网格重构均属此类。WorkBuddy这类AI工作台通过Skill将软件二次开发能力封装为可插拔技能包,利用HYSYS的COM/OLE接口和Comsol的Java API,实现自然语言指令到自动化执行的转变。其技术价值在于降低自动化门槛、沉淀工程经验,并支持日志审计与异常重试。在实际应用中,无论化工流程的灵敏度分析,还是激光焊接、移动网格等

weixin_29055699的博客 296

WebView实现Demo记录

【代码】WebView实现Demo记录。

chenhuakang的博客 507

华为OD机试真题2025双机位C卷 Java&Go 实现【卡牌游戏】

小明正在尝试一种新的牌游戏。游戏规则只如下:首先,小明拿到一张写有数字m的牌。 然后,他会拿到另外n张牌,上面分别写有不同的数字,牌排成一排。小明的目标是从这排牌中找到一串连续的牌,这些牌上数字的总和可以被 m整除。你的任务是判断小明是否可以完成这个目标。

MISAYAONE的博客 392

【MATLAB】STM32电机调速闭环控制工程

本文提出了一种基于MATLAB仿真与STM32实现的直流电机闭环PID调速控制方案。通过MATLAB建立电机数学模型并进行参数整定,仿真验证了增量式PID算法在启停、稳态和抗扰动方面的优越性能。基于STM32F103搭建了硬件系统,实现了编码器测速、定时中断控制、PWM输出等功能。实测表明,该系统转速超调<2%、稳态误差±2r/min,具备快速响应和强抗扰能力。相比开环控制,闭环调速显著提升了动态性能和稳态精度。方案提供了完整的仿真代码和嵌入式工程源码,可直接应用于智能小车、工业传动等场景,具有较高的

unber的博客 50

Android WebView Demo

本文,主要入门式的介绍了WebView的使用方式,

红日 2132

AD22等长布线规则

本文介绍了PCB布线中实现信号线等长的详细操作步骤:1.创建网络类(NetClass),将需要等长的信号线归入同一组;2.设置高速布线规则(High-SpeedRule),定义等长容差等参数;3.进行交互式等长布线(InteractiveLengthTuning),使用蛇形线调整线长;4.实时调整与最终检查,确保所有网络满足等长要求。文中还提供了实用技巧,如使用快捷键调整蛇形线参数、为关键信号设置更严格规则等。操作需在PCB设计软件中完成,通过统一管理、规则设置和精确调整来实现信号同步传输。

whm128的博客 1557

android webview 网络请求拦截

最近接到一个需求,需要拦截webview的网络请求,通过okhttp代发 通过webview设置WebViewClient,重写如下方法 @Override public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { return null; } 这时候碰...

owenli2015的博客 6820

RK3588 hdmiout调试(一)

RK3588 hdmiout调试(一)

目前从事linux驱动开发,多交流多学习吧 5169

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

webkit下的WebChromeClient

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666) 下面摘自开源中国社区WebChromeClient的源码,官方对方法作用和参数的解释非常详细,直接看英文注释理解更深刻,就不翻译了: WebChromeClient: /** * Copyright (C)...

孤云博客 2213

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

java webview事件_WebView使用详解(二)——WebViewClient与常用事件监听

前言:生活的艰难,更会激发对梦想的渴望,但艰难的生活却往往会成为梦想的绊脚石上篇给大家简单讲了Webview中Native代码与JS相互调用的方法,这篇我们再讲讲有关各种拦截与处理的东东。一、WebViewClient1、概述前面我们虽然实现了交互,但可能我们会有一个很简单的需求,就是在开始加载网页的时候显示进度条,加载结束以后隐藏进度条,这要怎么做?这些简单的需求,Android开发的老人们肯定...

weixin_32338107的博客 1385

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

探索WebViewDemo:一个轻巧强大的Web应用展示框架

探索WebViewDemo:一个轻巧强大的Web应用展示框架 是一个开源项目,它利用Android系统的WebView组件,为开发者提供了一个简洁而高效的平台,用于在原生Android应用中内嵌和展示Web应用程序或网页。这个项目的目的是简化移动应用开发,让开发者可以快速集成网页内容,无需编写大量额外代码。 技术解析 WebViewDemo的核心是Android的WebView组件,这是Andro...

gitblog_00051的博客 632

2024年Android中webview里js和java的相互调用--含代码demo解析,一眼就能看懂的Java自学手册

由于篇幅原因,就不多做展示了本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录需要这份系统化的资料的朋友,可以点击这里获取[外链图片转存中…(img-tbyvWkrD-1714834979740)][外链图片转存中…(img-SzDyXszN-1714834979740)][外链图片转存中…(img-VmSmLwXS-1714834979741)]由于篇幅原因,就不多做展示了本文已被。

2401_84024148的博客 1070

Android 实现WebView

【代码】Android 实现WebView。

qq_27494201的博客 895

java切换webview_在Android系统中使用WebViewClient处理跳转URL的方法

前言最近代码里和WebView有很多的交互,webview是android中的浏览器控件,这里主要介绍一下webview如何重载WebViewClient类来控制URL加载。使用WebViewClient使用WebViewClinet主要是继承WebViewClient父类,根据需要重写其中的方法,并在WebView中进行配置,示例代码如下:webView = (WebView) findView...

weixin_39944638的博客 372

WebView使用详解(二)——WebViewClient与常用事件监听

前言:生活的艰难,更会激发对梦想的渴望,但艰难的生活却往往会成为梦想的绊脚石 相关文章:1、《WebView使用详解(一)——Native与JS相互调用(附JadX反编译)》2、《WebView使用详解(二)——WebViewClient与常用事件监听》3、《WebView使用详解(三)——WebChromeClient与LoadData补充》 上篇给大家简单讲了Webview中Na...

启舰 8万+

android的WebView、WebViewClient、WebChromeClient的关系

在WebView的设计中,不是什么事都要WebView类干的,有些杂事是分给其他人的,这样WebView专心干好自己的解析、渲染工作就行了。WebViewClient就是帮助WebView处理各种通知、请求事件的,具体来说包括: onLoadResource、onPageStart、onPageFinish、onReceiveError、onReceivedHttpAuthRequest;

libaohan的专栏 5223

Android WebView与JavaScript交互操作(Demo)

为了使Android移动项目能够在较短的时间内完成开发,同时降低技术人员开发的成本投入,往往会采用Hybrid APP的开发模式。相关Hybrid APP(混合型应用)参看:http://blog.youkuaiyun.com/mahoking/article/details/30235243 采用这种模式,为了解决更好的用户体验,可访问本地资源的能力。势必需要了解与掌握Android(java)与JavaScript之间的交互、相互调用操作的方法与技术。

HOKING的专栏 7208

Android使用WebView加载网页及数据

今天主要介绍一下Android的一个原生组件-WebView。 在Api中关于这个类的介绍大致就是这是一个可以显示网页的视图,如:webView.loadUrl("http://www.baidu.com/");显示结果: 还可以加载一些html的字符串,如:String str = "<html><body>You scored <b>192</b> points.</body></html>

wubihang的博客 2万+

Mysql date的大于某一个时间点

直接使用类似下面的方法就可以了 select status,edate,cdate from cp_trade_master where pay=2300 and proxy_uid=139144 and edate>'2016-07-27 19:30:00' order by edate desc;

Kodulf的专栏 5万+
上一篇: Android的解锁和唤醒,这里锁屏还没有完成,有问题
下一篇: [已解决]EditText 代码中不能够添加小数点的属性 android:inputType="numberDecimal"
千雅爸爸
博客等级 码龄18年 292粉丝 639原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值