android控件之webview和js与java交互
首先添加权限:<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交互的更多相关文章
- (转载)android控件之WebView控件缩小
android控件之WebView控件缩小 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-16我要评论 发现这个控件挺好用,能自已控制进度条,而且这个控件的功能非常壮大,先上个简单的 ...
- Android控件之WebView
如何在Android应用中打开Web网站呢?谷歌为我们提供了解决方案,现在就让我们一起看一下WebView控件吧. 为了方便总结,就以实现下面这个效果为主线,进行总结: 首先我们先看一下它的布局文件吧 ...
- Android 控件: Webview 的一些知识点
WebView 加载网页,当点击返回键的时,会显示上一个页面,并刷新. 同时可以对返回上一个页面进行干预,就是用到了缓存. webview加载网页的几个模式,即websetting中设置的加载模式.w ...
- 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互
[源码下载] 背水一战 Windows 10 (64) - 控件(WebView): 加载指定 HttpMethod 的请求, 自定义请求的 http header, app 与 js 的交互 作者: ...
- 重新想象 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 ...
- 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互
[源码下载] 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互 作者:webabcd 介 ...
- Robotium之Android控件定位实践和建议(Appium/UIAutomator姊妹篇)
本人之前以前撰文描写叙述Appium和UIAutomator框架是怎样定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议 Appium基于安卓的各种Fin ...
- 重新想象 Windows 8 Store Apps (8) - 控件之 WebView
原文:重新想象 Windows 8 Store Apps (8) - 控件之 WebView [源码下载] 重新想象 Windows 8 Store Apps (8) - 控件之 WebView 作者 ...
- Robotium之Android控件定位实践和建议
本人之前曾经撰文描述Appium和UIAutomator框架是如何定位Android界面上的控件的. UIAutomator定位Android控件的方法实践和建议Appium基于安卓的各种FindEl ...
随机推荐
- ping 和 远程桌面 与防火墙的关系
现象: 初始化服务器时,人们为了方便,常常关闭防火墙,这样做很危险.我们经常遇到问题是,防火墙一旦打开,ping和远程桌面就会有问题. 有时ping不通,但能远程:但有时ping通,又远程不了:有时都 ...
- ExtJS常用代码集合
ExtJS常用代码集合,包括弹出提示框,登陆框,树状结构等等.1. [代码]弹出提示框 <html> <head> <title>Ge ...
- C/C++ 编译器优化
0. gcc -o gcc -o 的优化仍然是机械的,想当然的.只有做到深入理解计算机系统,加深对编程语言的理解,才能写出最优化的代码. Linux下gcc 优化等级的介绍 gcc -o0 ⇒ 不提供 ...
- Struts2声明式异常处理
通过配置.xml文件的方式处理异常信息: 注意:配置.xml文件的同时还要抛出异常 标签:<exception-mapping></exception-mapping>和< ...
- LRU原理和Redis实现——一个今日头条的面试题
看了评论,发现有些地方有问题,更新了图和一些描述,希望可以更清晰一些,也欢迎关注,还会有干货文章 -------- 很久前参加过今日头条的面试,遇到一个题,目前半部分是如何实现 LRU,后半部分是 R ...
- ADC 与实际电压值的关系
1.首先确定ADC用几位表示,最大数值是多少.比如一个8位的ADC,最大值是0xFF,就是255. 2.然后确定最大值时对应的参考电压值.一般而言最大值对应3.3V.这个你需要看这个芯片ADC模块的说 ...
- 洛谷 - P1379 - 八数码难题 - bfs
https://www.luogu.org/problemnew/show/P1379 #include <bits/stdc++.h> using namespace std; #def ...
- AssetDatabase文档翻译
AssetDatabase是一个能获取工程资源的API,它提供一些方法比如:查找.加载.创建.删除和修改.Unity需要了解工程文件夹里的所有改变,假如想要获取或修改资源文件,就使用 AssetDat ...
- tcpdump笔记
最好的学习: man tcpdump ....... 一.TCPdump抓包命令 tcpdump是一个用于截取网络分组,并输出分组内容的工具.tcpdump凭借强大的功能和灵活的截取策略,使其成为类 ...
- K8S学习心得 == kube-controller-manager 报错configmaps "extension-apiserver-authentication" is forbidden: User "kubernetes" cannot get resource "configmaps" in API group ""
当我按照教材设置证书,配置好kube-controller的相关条件后,启动kube-controller-manage组件,却意外报错. 一.基本信息如下: 1. kube-controller-m ...