android开源表达式计算器,安卓案例:表达式计算器

安卓案例:表达式计算器

一、运行效果

03526418eda3e12d9ed2fe3f7ab7de6e.png

如果没有输入表达式或输入表达式有误,会弹出警告对话框:

2b2204e5b918acde5632ebb4f4546c49.png

输入合法的JavaScript表达式:

bbc5a71229c396cd65ff06f313756fd8.png

单击【计算】按钮:

d2575175c98f56dcaf15e2520d5a070f.png

再输入一个表达式进行测试:

b839f951a4bc22a1e9912bd7a6d9f01e.png

二、涉及知识点

1、标签、按钮、文本框

2、网页视图(WebView)

3、安卓调用JavaScript

三、实现步骤

1、创建安卓应用ExpressionCalculator

7c7f0f44572e4577732b4412914cefb5.png

2、将背景图片background.jpg拷贝到mipmap目录

b8ab6381c22f46f6ab2ce6d7acc07afb.png

3、主布局资源文件activity_main.xml

10f9e61ac8c2806be4193081c18910b6.png

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"

android:background="@mipmap/background"

android:orientation="vertical"

android:padding="15dp" >

android:id="@+id/tv_title"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/title"

android:textColor="#0000ff"

android:textSize="30sp" />

android:id="@+id/webview"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:visibility="gone" />

android:id="@+id/edt_expression"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:background="@android:drawable/edit_text"

android:hint="@string/input_expression"

android:singleLine="true" />

android:id="@+id/tv_result"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="6"

android:paddingLeft="5dp"

android:paddingRight="5dp"

android:paddingTop="20dp"

android:textSize="20sp" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="1"

android:gravity="center" >

android:id="@+id/btn_calculate"

android:layout_width="120dp"

android:layout_height="wrap_content"

android:onClick="doCalculate"

android:text="@string/calculate" />

android:id="@+id/btn_clear"

android:layout_width="120dp"

android:layout_height="wrap_content"

android:onClick="doClear"

android:text="@string/clear" />

4、字符串资源文件strings.xml

b7fe3870540f098d2a03210198eedc9d.png

表达式计算器

计算

清空

表达式计算器

请输入表达式

5、创建assets目录,在里面创建calculate.html文件

6cae6c7d9123563c3978f58ced5fb8d9.png

function calculate(exp) {

if (!exp) {

alert("表达式不能为空!");

} else {

alert(exp);

}

}

6、主界面类MainActivity

fe5f6eecb2d55c7efda19ea3b1ac8497.png

package net.hw.expression_calculator;

import android.app.Activity;

import android.app.AlertDialog;

import android.os.Bundle;

import android.view.View;

import android.webkit.JsResult;

import android.webkit.WebChromeClient;

import android.webkit.WebView;

import android.widget.EditText;

import android.widget.TextView;

/**

* 功能:表达式计算器

* 比如:3+(4*2-16/3)*2;6*2>56/7

* 作者:华卫

* 日期:2016年11月22日

*/

public class MainActivity extends Activity {

/**

* 网页视图

*/

private WebView webview;

/**

* 输入表达式的文本框

*/

private EditText edtExpression;

/**

* 显示计算结果的标签

*/

private TextView tvResult;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 利用布局资源文件设置用户界面

setContentView(R.layout.activity_main);

// 通过控件资源标识符获得控件实例

webview = (WebView) findViewById(R.id.webview);

tvResult = (TextView) findViewById(R.id.tv_result);

edtExpression = (EditText) findViewById(R.id.edt_expression);

// 设置JavaScript可用

webview.getSettings().setJavaScriptEnabled(true);

// 利用webview加载本地页面

webview.loadUrl("file:///android_asset/calculate.html");

// 设置网页浏览器客户端,能监听到网页弹出警告框

webview.setWebChromeClient(new WebChromeClient() {

@Override

public boolean onJsAlert(WebView view, String url, String message, JsResult result) {

/* 创建一个安卓警告对话框 */

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // 创建警告对话框构建器

// 设置对话框图标

builder.setIcon(R.mipmap.ic_launcher);

if (message.equals("表达式不能为空!")) {

// 设置对话框标题

builder.setTitle("错误提示");

// 设置对话框正文

builder.setMessage(message);

} else {

// 设置对话框标题

builder.setTitle("运算结果");

// 设置对话框正文

builder.setMessage(edtExpression.getText().toString() + " = " + message);

// 设置结果标签内容

tvResult.setText(edtExpression.getText().toString() + " = " + message);

}

// 设置确定按钮

builder.setPositiveButton("确定", null);

// 根据设置创建警告对话框

AlertDialog dialog = builder.create();

// 显示警告对话框

dialog.show();

// 处理用户的确认操作

result.confirm();

// 事件处理完毕

return true;

}

});

}

/**

* 计算按钮单击事件处理方法

*

* @param view

*/

public void doCalculate(View view) {

// 获取用户输入的表达式

String strExpression = edtExpression.getText().toString().trim();

// 利用webview调用JavaScript函数

webview.loadUrl("javascript:calculate(" + strExpression + ")");

}

/**

* 清空按钮单击事件处理方法

*

* @param view

*/

public void doClear(View view) {

// 清空表达式文本框内容

edtExpression.setText("");

// 清空结果标签内容

tvResult.setText("");

// 表达式文本框获取焦点

edtExpression.requestFocus();

}

}

本文分享 CSDN - howard2005。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值