首先添加权限:<uses-permission android:name="android.permission.INTERNET"/>

布局文件:

<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=".MainActivity" > <TextView
android:id="@+id/preNums"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:padding="10dp"
android:text="当前进度:0%" /> <WebView
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/preNums" /> </RelativeLayout>

  

html5页面代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0;"/>
<meta name="format-detection" content="telephone=no"/>
<title>手机网页</title>
<style>
*{ padding:0px; margin:0px;}
div{ margin:0px auto;}
.mytop{ height:60px; background-color:#000000; text-align:center;}
.myfont{ color:#FFFFFF; font-size:16px; font-weight:bold; line-height:60px;}
.mytest{ background-color:#FF0000; margin:20px auto; width:100px; height:100px; border-radius:50px; box-shadow:8px 8px 8px #0000FF; line-height:100px; text-align:center;}
</style>
<script>
function ChangeDiv(){
//document.getElementById("insertDiv").innerHTML='哈哈';
//调用java代码
MyAndroid.MyFun("哈哈可以调用");
} // 被java调用的方法
function ToJavaFun(outstr){
document.getElementById("insertDiv").innerHTML=outstr;
}
</script>
</head> <body> <div class="mytop">
<a href="http://www.baidu.com" class="myfont">前往百度</a>
</div> <div class="mytest" id="insertDiv">
</div> <div style="text-align:center; padding:10px;">
<input name="" type="button" value="执行" onClick="ChangeDiv('你好');" >
</div>
</body>
</html>

  

java代码:

package com.example.mywebview;

import android.os.Bundle;
import android.os.Handler;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu;
import android.webkit.JavascriptInterface;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import android.widget.Toast; /*
* author:future
*
* sijienet.com
*
* */ @SuppressLint({ "JavascriptInterface", "SetJavaScriptEnabled" })
public class MainActivity extends Activity { WebView webView;
TextView textView;
Handler handler; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); handler = new Handler(); webView = (WebView) findViewById(R.id.webView1);
textView = (TextView) findViewById(R.id.preNums); // 开启js接口模式
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new MyAndroidFun(), "MyAndroid"); webView.setWebViewClient(new MyWebClient());
webView.setWebChromeClient(new MyChrome());// 配置默认参数 webView.loadUrl("file:///android_asset/index.html");
} class MyChrome extends WebChromeClient { @Override
public void onProgressChanged(WebView view, int newProgress) {
// 进度更新
textView.setText("当前进度:" + newProgress + "%");
super.onProgressChanged(view, newProgress);
} } class MyAndroidFun {// 调用类作用于 @JavascriptInterface
public void MyFun(String msg) {
Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT)
.show(); handler.post(new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub
String outString = "我的内容";
webView.loadUrl("javascript:ToJavaFun('" + outString + "')");
}
}); } } @Override
public void onBackPressed() {
// TODO Auto-generated method stub
if (webView.canGoBack()) {
webView.goBack();
}
// super.onBackPressed();
} class MyWebClient extends WebViewClient { @Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
if (url != null && url.length() > 0) { if (url.indexOf("http://") != -1
|| url.indexOf("https://") != -1) {// 不存在 } else {
// 添加前缀
url = "http://" + url;
} view.loadUrl(url);
return true;
}
return super.shouldOverrideUrlLoading(view, url);
} } }

  

android控件之webview和js与java交互的更多相关文章

  1. (转载)android控件之WebView控件缩小

    android控件之WebView控件缩小 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-16我要评论 发现这个控件挺好用,能自已控制进度条,而且这个控件的功能非常壮大,先上个简单的 ...

  2. Android控件之WebView

    如何在Android应用中打开Web网站呢?谷歌为我们提供了解决方案,现在就让我们一起看一下WebView控件吧. 为了方便总结,就以实现下面这个效果为主线,进行总结: 首先我们先看一下它的布局文件吧 ...

  3. Android 控件: Webview 的一些知识点

    WebView 加载网页,当点击返回键的时,会显示上一个页面,并刷新. 同时可以对返回上一个页面进行干预,就是用到了缓存. webview加载网页的几个模式,即websetting中设置的加载模式.w ...

  4. 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互

    [源码下载] 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互 作者: ...

  5. 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Contract 分享 WebView 中的内容, 为 WebView 截图

    [源码下载] 重新想象 Windows 8.1 Store Apps (81) - 控件增强: WebView 之加载本地 html, 智能替换 html 中的 url 引用, 通过 Share Co ...

  6. 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互

    [源码下载] 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互 作者:webabcd 介 ...

  7. Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)

    本人之前以前撰文描写叙述Appium和UIAutomator框架是怎样定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议 Appium基于安卓的各种Fin ...

  8. 重新想象 Windows 8 Store Apps (8) - 控件之 WebView

    原文:重新想象 Windows 8 Store Apps (8) - 控件之 WebView [源码下载] 重新想象 Windows 8 Store Apps (8) - 控件之 WebView 作者 ...

  9. Robotium之Android控件定位实践和建议

    本人之前曾经撰文描述Appium和UIAutomator框架是如何定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议Appium基于安卓的各种FindEl ...

随机推荐

  1. POJ2251 Dungeon Master —— BFS

    题目链接:http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  2. codeforces 459 B.Pashmak and Flowers 解题报告

    题目链接:http://codeforces.com/problemset/problem/459/B 题目意思:有 n 朵 flowers,每朵flower有相应的 beauty,求出最大的beau ...

  3. Java 网络处理(net io URL 等)

    1. URL 类 URL 类的两个重要方法: openStream():打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream. URL url = new URL(" ...

  4. egret 和cocos2d-x-js哪个目前更稳定更好用? ?

    问题: 貌似cocos名气大一些?因为神经猫的大火才知道egret,玩了一下他们的demo,貌似性能一般,不过对flash开发者特别亲切.有人对比过这两个引擎吗?分析下 百牛信息技术bainiu.lt ...

  5. Binder通信机制介绍

    1.Binder通信机制介绍 这篇文章会先对比Binder机制与Linux的通信机制的差别,了解为什么Android会另起炉灶,采用Binder.接着,会根据 Binder的机制,去理解什么是Serv ...

  6. 【212】HDF更新数据&HDF创建

    HDF更新数据:对原有HDF数据进行数据更新,不破坏HDF的数据结构 pro add_data_sst ;实现将SST增加1度,再将结果更新到SST中 ;1. 获取SST索引 ;2. 通过索引获取ID ...

  7. 洛谷 - P2578 - 九数码游戏 - bfs

    https://www.luogu.org/problemnew/show/P2578 一个挺搞的东西,用康托展开做记忆化搜索可以少一个log的查询. #include <bits/stdc++ ...

  8. Codeforces - 706B - Interesting drink - 二分 - 简单dp

    https://codeforces.com/problemset/problem/706/B 因为没有看见 $x_i$ 的上限是 $10^5$ ,就用了二分去做,实际上这道题因为可乐的价格上限是 $ ...

  9. 二分匹配ZOJ3646

    //题意:类比线代里:把矩阵中的U看作[1],是否满足一个满秩矩阵 //利用二分匹配就是 //每一行都有相对应的列: #include<iostream> #include<stri ...

  10. python 测试用例

    mydict.py代码如下: class Dict(dict): def __init__(self, **kw): super().__init__(**kw) def __getattr__(se ...