手把手教你做安豆计算器(三)-计算器功能实现
2016-07-02 08:21
302 查看
第4节 计算器功能实现
这一节我们将实现计算器的功能。在实现的过程中,可以随时将修改的代码部署到设备上,看看实际的效果。4.1 添加按钮响应
按钮是需要在用户点击的时候做出响应的。每当用户点击一下按钮,我们就需要更新一下显示区域,或者采取一个动作。在布局文件中,给所有
Button控件的
android:onClick属性设置一个响应函数,这里我们给这个相应函数也取名叫做
onClick;
<TableRow android:layout_weight="1"> <Button android:id="@+id/btn_c" android:text="C" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:onClick="onClick"/> <Button android:id="@+id/btn_del" android:text="DEL" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:onClick="onClick"/> <Button android:id="@+id/btn_div" android:text="/" android:layout_weight="1" android:layout_width="0dp" android:layout_height="match_parent" android:onClick="onClick"/> </TableRow>
在
MainActivity.java的源代码当中,添加对应的
onClick()函数方法。这个方法声明为
public,返回值为
void,传入的参数是
View,这个
View就是被点击的对象;
public void onClick(View view) { }
每次点击的是哪个按钮,可以用按钮的
android:id来区分。在代码中,
id通过Android Studio自动编译生成的
R-资源类来访问,形如
R.id.xxx;而获取一个
View的
id,可以通过
view.getId();
public void onClick(View view) { switch (view.getId()) { case R.id.btn_0: case R.id.btn_1: case R.id.btn_2: case R.id.btn_3: case R.id.btn_4: case R.id.btn_5: case R.id.btn_6: case R.id.btn_7: case R.id.btn_8: case R.id.btn_9: case R.id.btn_add: case R.id.btn_sub: case R.id.btn_mul: case R.id.btn_div: case R.id.btn_dot: case R.id.btn_c: case R.id.btn_del: case R.id.btn_equ: break; } }
为了验证按钮响应是否其作用,可以在
onClick()函数中使用
Toast;在设备上运行之后,就会发现,每点击一次按钮,就会弹出一个小框,提示“onClick”;
public void onClick(View view) { ...... Toast.makeText(this, "onClick", Toast.LENGTH_SHORT).show(); }
4.2 表达式输入功能
当用户点击数字键(0-9和.)以及运算符键(+-*/)时,需要将它们对应的符号显示到表达式区域。把
view转换成
Button类型,通过
Button的
getText()方法,获取按钮上的字符;
通过Activity的
findViewById()方法获取表达式区域;在通过表达式区域
TextView的
getText()方法,获取已经显示在表达式区域上的内容;
把按钮代表的字符,添加到表达式内容的最后;
把新的表达式内容,通过
TextView的
setText()方法,显示到表达式区域上。
public void onClick(View view) { switch (view.getId()) { case R.id.btn_0: case R.id.btn_1: case R.id.btn_2: case R.id.btn_3: case R.id.btn_4: case R.id.btn_5: case R.id.btn_6: case R.id.btn_7: case R.id.btn_8: case R.id.btn_9: case R.id.btn_add: case R.id.btn_sub: case R.id.btn_mul: case R.id.btn_div: case R.id.btn_dot: { Button btn = (Button) view; String strAdded = btn.getText().toString(); TextView formula = (TextView) findViewById(R.id.formula_area); String strContent = formula.getText().toString(); String strNewContent = strContent + strAdded; formula.setText(strNewContent); } break; ...... } }
4.3 显示区域清除功能
当用户点击“C”按钮的时候,清空显示区域的内容和结果区域的内容。通过Activity的
findViewById()方法,分别获取表达式区域和结果区域;
通过
TextView的
setText()方法,分别为它们设置空字符串。
public void onClick(View view) { switch (view.getId()) { ...... case R.id.btn_c: { TextView formula = (TextView) findViewById(R.id.formula_area); formula.setText(""); TextView result = (TextView) findViewById(R.id.result_area); result.setText(""); } break; ...... } }
当用户点击“DEL”按钮的时候,删除表达式内容的最后一个字符。
获取表达式区域的内容;
如果表达式区域是空的,没有字符串,就不管它;否则利用
String类的
subString()方法,截取最后一个字符之前的所有内容;
将最新截取的内容,设置到表达式区域里。
public void onClick(View view) { switch (view.getId()) { ...... case R.id.btn_del: { TextView formula = (TextView) findViewById(R.id.formula_area); String strContent = formula.getText().toString(); if (strContent.length() > 0) { strContent = strContent.substring(0, strContent.length() - 1); formula.setText(strContent); } } break; } }
4.4 等于功能
当用户点击“=”按钮的时候,开始计算。4.4.1 引入第三方库
我们将使用第三方计算库Arity对表达式进行计算。
Arity库文件可以在安豆网提供的下载地址进行下载。
下载完成后,
将下载的
arity-2.1.2.jar复制到项目工程所在的
Calulator\app\libs目录下,如果这个目录不存在,就自己创建一个;
在Android Studio左边的项目浏览区,选择
Project视图;
在
app->libs->arity-2.1.2,jar上点击右键,选择
Add as Library...;
在弹出的选择框中,点击
OK。
4.4.2 使用第三方库
利用第三方库,对运算表达式进行计算,获取表达式区域的内容;
创建第三方库Arity提供的
Symbols对象,使用它的
evl()方法,计算表达式的内容;
将计算结果显示到计算结果区域,并清空表达式区域;
如果Arity不能根据提供的计算表达式进行计算,会抛出异常。因此使用
try...catch抓住异常,用
Toast类给用户一个内容为
错误!的提示。
public void onClick(View view) { switch (view.getId()) { ...... case R.id.btn_equ: { TextView formula = (TextView) findViewById(R.id.formula_area); String strContent = formula.getText().toString(); try { Symbols s = new Symbols(); double res = s.eval(strContent); TextView result = (TextView) findViewById(R.id.result_area); result.setText(String.valueOf(res)); formula.setText(""); } catch (SyntaxException e) { Toast.makeText(MainActivity.this, “错误!”, Toast.LENGTH_SHORT).show(); } } break; } }
至此,一个具有计算功能的计算器就已经出现了。
相关文章推荐
- 复习(计算机基础)_3:进程管理
- AHCI vs NVMe
- Android Studio Instant Run注意事项
- gulp的常用api
- 实现配置文件备份的小脚本
- Expression Add Operators
- Asp.Net MVC 扩展 Html.ImageFor 方法详解
- Android常见面试题(一)
- Java中的内部接口
- Microsoft product line summarize
- 计算机学习路径
- Android自动连接指定的wifi,免密码或指定密码
- 设置元素竖向居中的三种方式
- 上古神器vim插件:你真的学会用NERDTree了吗?
- 通过View获取Controller
- 高并发性能调试经验分享
- 一步步带你,如何网站架构
- NVMe 图解
- 手机页面需要添加的标签
- 绝杀!Debug 大法,让运维不再尴尬