Android与Javascript交互示例(三)

简介: MainAcivity如下: package cn.testjavascriptdialog;import android.os.Bundle;import android.

MainAcivity如下:

package cn.testjavascriptdialog;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.LayoutInflater;
import android.view.View;
import android.webkit.JsPromptResult;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.EditText;
/**
 * Demo描述:
 * 测试Android响应Javascript的三种对话框
 * 
 * 参考资料:
 * http://www.cnblogs.com/luckjun/archive/2013/03/22/2976117.html
 */
public class MainActivity extends Activity {
	 private WebView mWebView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init(){
		mWebView=(WebView) findViewById(R.id.webView);
		initWebViewSettings();
		// 为WebView设置WebChromeClient
		mWebView.setWebChromeClient(new WebChromeClientSubClass());
		//加载本地Html文件
		mWebView.loadUrl("file:///android_asset/test.html");
	}
	private void initWebViewSettings(){
		mWebView.setVerticalScrollBarEnabled(false);
		mWebView.setHorizontalScrollBarEnabled(false);
		mWebView.getSettings().setJavaScriptEnabled(true);
		mWebView.getSettings().setSupportZoom(true);
		mWebView.getSettings().setDomStorageEnabled(true);
		mWebView.getSettings().setPluginsEnabled(true);
		mWebView.requestFocus();
		mWebView.getSettings().setUseWideViewPort(true);
		mWebView.getSettings().setLoadWithOverviewMode(true);
		mWebView.getSettings().setSupportZoom(true);
		mWebView.getSettings().setBuiltInZoomControls(true);
	}

	private class WebChromeClientSubClass extends WebChromeClient{
		@Override
		public boolean onJsAlert(WebView view, String url, String message,final JsResult result) {
			Dialog alertDialog=null;
			AlertDialog.Builder builder=new Builder(MainActivity.this);
			builder.setTitle("Javascript的alert对话框");
			builder.setMessage(message);
			builder.setNegativeButton("OK", new OnClickListener() {
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					System.out.println("现在显示的是Javascript的alert对话框");
					//注意:
					//必须要这一句代码:result.confirm()表示:
					//处理结果为确定状态同时唤醒WebCore线程 
					//否则不能继续点击按钮
					result.confirm();
				}
			});
			alertDialog=builder.create();
			alertDialog.show();
			return true;
		}
		@Override
		public boolean onJsConfirm(WebView view, String url, String message,final JsResult result) {
			Dialog confirmDialog=null;
			AlertDialog.Builder builder=new Builder(MainActivity.this);
			builder.setTitle("Javascript的confirm对话框");
			builder.setMessage(message);
			builder.setPositiveButton("OK", new OnClickListener() {
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					System.out.println("现在点击的是Javascript的confirm对话框的OK");
					//处理结果为确定状态同时唤醒WebCore线程 
					result.confirm();
				}
			});
			builder.setNegativeButton("NO", new OnClickListener() {
				@Override
				public void onClick(DialogInterface arg0, int arg1) {
					System.out.println("现在点击的是Javascript的confirm对话框的NO");
					//处理结果为取消状态同时唤醒WebCore线程 
					result.cancel();
				}
			});
			confirmDialog=builder.create();
			confirmDialog.show();
			return true;
		}
		@Override
		public boolean onJsPrompt(WebView view, String url, String message,String defaultValue, final JsPromptResult result) {
			 LayoutInflater inflater = getLayoutInflater(); 
             View promptView = inflater.inflate(R.layout.prompt, null); 
             final EditText nameEditText = (EditText) promptView.findViewById(R.id.nameEditText); 
             nameEditText.setHint("请输入您的名字"); 
               
            Dialog promptDialog=null;
 			AlertDialog.Builder builder=new Builder(MainActivity.this);
 			builder.setView(promptView);
 			builder.setTitle("Javascript的prompt对话框");
 			builder.setPositiveButton("OK", new OnClickListener() {
 				@Override
 				public void onClick(DialogInterface arg0, int arg1) {
 					System.out.println("现在点击的是Javascript的prompt对话框的OK");
 					//处理结果为取消状态且唤醒WebCore线程 
 					//同时弹出alert对话框提示用户
 					result.confirm(nameEditText.getText().toString());
 				}
 			});
 			builder.setNegativeButton("NO", new OnClickListener() {
 				@Override
 				public void onClick(DialogInterface arg0, int arg1) {
 					System.out.println("现在点击的是Javascript的prompt对话框的NO");
 					//处理结果为取消状态同时唤醒WebCore线程 
 					result.cancel();
 				}
 			});
 			promptDialog=builder.create();
 			promptDialog.show();
            return true; 
		}
	}
}


main.xml如下:

<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"
    >

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="测试Android响应Javascript的三种对话框"
        android:layout_centerHorizontal="true"
     />
    <WebView 
        android:id="@+id/webView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@id/textView"
        />

</RelativeLayout>

 

prompt.xml如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <EditText
        android:id="@+id/nameEditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
     />

</LinearLayout>


test.html如下:

        <html> 
    <head> 
        <script type="text/javascript"> 
            function doAlert() { 
                alert("hello!"); 
            } 
       
            function doConfirm() { 
                confirm("are you sure?"); 
            } 
       
            function doPrompt() { 
                var val = prompt("what's your name?"); 
                if (val) { 
                    alert("your name is:" + val); 
                } 
            } 
       
           
       
            function success(msg) { 
                alert(msg); 
            } 
        </script> 
    </head> 
    <body background="black"> 
        <br>
        <br>
        <input type="button" value="alert" onclick="doAlert()"/><br/> 
        <br>
        <br>
        <input type="button" value="confirm" onclick="doConfirm()"/><br/> 
        <br>
        <br>
        <input type="button" value="prompt" onclick="doPrompt()"/><br/> 
        <br>
        <br>
        
        <div id="result"></div> 
    </body> 
</html> 


 

相关文章
|
1月前
|
Java Linux Android开发
移动应用开发与操作系统的交互:深入理解Android和iOS
在数字时代,移动应用成为我们日常生活的一部分。本文将深入探讨移动应用开发的核心概念、移动操作系统的工作原理以及它们如何相互作用。我们将通过实际代码示例,展示如何在Android和iOS平台上创建一个简单的“Hello World”应用,并解释其背后的技术原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。
|
3月前
|
开发框架 JavaScript 前端开发
揭秘:如何让你的asp.net页面变身交互魔术师——先施展JavaScript咒语,再引发服务器端魔法!
【8月更文挑战第16天】在ASP.NET开发中,处理客户端与服务器交互时,常需先执行客户端验证再提交数据。传统上使用ASP.NET Button控件直接触发服务器事件,但难以插入客户端逻辑。本文对比此法与改进方案:利用HTML按钮及JavaScript手动控制表单提交。后者通过`onclick`事件调用JavaScript函数`SubmitForm()`来检查输入并决定是否提交,增强了灵活性和用户体验,同时确保了服务器端逻辑的执行。
48 5
|
15天前
|
设计模式 前端开发 JavaScript
揭秘!前端大牛们如何巧妙利用JavaScript,打造智能交互体验!
【10月更文挑战第30天】前端开发领域充满了无限可能与创意,JavaScript作为核心语言,凭借强大的功能和灵活性,成为打造智能交互体验的重要工具。本文介绍前端大牛如何利用JavaScript实现平滑滚动、复杂动画、实时数据更新和智能表单验证等效果,展示了JavaScript的多样性和强大能力。
31 4
|
1月前
|
存储 JavaScript 前端开发
【JavaScript】网页交互的灵魂舞者
本文介绍了 JavaScript 的三种引入方式(行内、内部、外部)和基础语法,包括变量、数据类型、运算符、数组、函数和对象等内容。同时,文章还详细讲解了 jQuery 的基本语法和常用方法,如 `text()`、`html()`、`val()`、`attr()` 和 `css()` 等,以及如何插入和删除元素。通过示例代码和图解,帮助读者更好地理解和应用这些知识。
16 1
【JavaScript】网页交互的灵魂舞者
|
25天前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
28 1
|
2月前
|
前端开发 JavaScript 开发者
Express.js与前端框架的集成:React、Vue和Angular的示例与技巧
本文介绍了如何将简洁灵活的Node.js后端框架Express.js与三大流行前端框架——React、Vue及Angular进行集成,以提升开发效率与代码可维护性。文中提供了详细的示例代码和实用技巧,展示了如何利用Express.js处理路由和静态文件服务,同时在React、Vue和Angular中构建用户界面,帮助开发者快速掌握前后端分离的开发方法,实现高效、灵活的Web应用构建。
55 3
|
2月前
|
JavaScript 前端开发
JavaScript 与 DOM 交互
【9月更文挑战第01天】
29 2
|
3月前
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
36 3
|
3月前
|
JavaScript 前端开发 UED
Vue.js动画魔法:解锁流畅过渡,让每一次交互都成为用户心中的小确幸!
【8月更文挑战第30天】在Vue.js中,动画与过渡效果不仅是视觉点缀,更是提升用户体验的关键。通过流畅的动态效果,应用的互动性和吸引力得以增强,从而提高用户满意度和参与度。`&lt;transition&gt;`和`&lt;transition-group&gt;`组件结合CSS过渡,可轻松实现元素的进入、离开及列表变化动画。合理的性能优化,如使用硬件加速,能避免页面卡顿,确保动画既美观又高效。下面是一个简单的淡入淡出效果示例,展示了如何利用Vue.js实现平滑的动画过渡。总之,恰当的动画设计能显著提升应用的用户体验。
56 0
Vue.js动画魔法:解锁流畅过渡,让每一次交互都成为用户心中的小确幸!
|
3月前
|
前端开发 JavaScript 开发者
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例
本文提供了一个前端JS按钮点击事件、弹出式窗口和遮罩层的实战示例,包括HTML、CSS和JavaScript的具体实现代码,以及功能解析,演示了如何实现按钮点击后触发弹窗显示和遮罩层,并在2秒后自动关闭或点击遮罩层关闭弹窗的效果。
前端JS按钮点击事件、跳出弹窗、遮罩的实战示例