您的位置:首页 > 其它

手把手教你做安豆计算器(三)-计算器功能实现

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;
}
}


至此,一个具有计算功能的计算器就已经出现了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: