安豆计算器 第4节 计算器功能实现

第4节 计算器功能实现

这一节我们将实现计算器的功能。在实现的过程中,可以随时将修改的代码部署到设备上,看看实际的效果。

4.1 添加按钮响应

按钮是需要在用户点击的时候做出响应的。每当用户点击一下按钮,我们就需要更新一下显示区域,或者采取一个动作。

  1. 在布局文件中,给所有Button控件的android:onClick属性设置一个响应函数,这里我们给这个相应函数也取名叫做onClick

  2. MainActivity.java的源代码当中,添加对应的onClick()函数方法。这个方法声明为public,返回值为void,传入的参数是View,这个View就是被点击的对象;

  3. 每次点击的是哪个按钮,可以用按钮的android:id来区分。在代码中,id通过Android Studio自动编译生成的R-资源类来访问,形如R.id.xxx;而获取一个Viewid,可以通过view.getId()

  4. 为了验证按钮响应是否其作用,可以在onClick()函数中使用Toast;在设备上运行之后,就会发现,每点击一次按钮,就会弹出一个小框,提示“onClick”;

4.2 表达式输入功能

当用户点击数字键(0-9和.)以及运算符键(+-*/)时,需要将它们对应的符号显示到表达式区域。

  1. view转换成Button类型,通过ButtongetText()方法,获取按钮上的字符;
  2. 通过Activity的findViewById()方法获取表达式区域;在通过表达式区域TextViewgetText()方法,获取已经显示在表达式区域上的内容;
  3. 把按钮代表的字符,添加到表达式内容的最后;
  4. 把新的表达式内容,通过TextViewsetText()方法,显示到表达式区域上。

4.3 显示区域清除功能

当用户点击“C”按钮的时候,清空显示区域的内容和结果区域的内容。

  1. 通过Activity的findViewById()方法,分别获取表达式区域和结果区域;
  2. 通过TextViewsetText()方法,分别为它们设置空字符串。


当用户点击“DEL”按钮的时候,删除表达式内容的最后一个字符。

  1. 获取表达式区域的内容;
  2. 如果表达式区域是空的,没有字符串,就不管它;否则利用String类的subString()方法,截取最后一个字符之前的所有内容;
  3. 将最新截取的内容,设置到表达式区域里。

4.4 等于功能

当用户点击“”按钮的时候,开始计算。

4.4.1 引入第三方库

我们将使用第三方计算库Arity对表达式进行计算。Arity库文件可以在安豆网提供的下载地址进行下载。

下载完成后,

  1. 将下载的arity-2.1.2.jar复制到项目工程所在的Calulator\app\libs目录下,如果这个目录不存在,就自己创建一个;
  2. 在Android Studio左边的项目浏览区,选择Project视图;
  3. app->libs->arity-2.1.2,jar上点击右键,选择Add as Library...
  4. 在弹出的选择框中,点击OK

4.4.2 使用第三方库

利用第三方库,对运算表达式进行计算,

  1. 获取表达式区域的内容;
  2. 创建第三方库Arity提供的Symbols对象,使用它的evl()方法,计算表达式的内容;
  3. 将计算结果显示到计算结果区域,并清空表达式区域;
  4. 如果Arity不能根据提供的计算表达式进行计算,会抛出异常。因此使用try...catch抓住异常,用Toast类给用户一个内容为错误!的提示。

至此,一个具有计算功能的计算器就已经出现了。