之前自己的编程完全是在PC上进行的,而且主要是在算法和数据结构上。由于某些需要加之认识到Android的重要性,且大学走到现在基本上没什么课了,空闲时间很多,于是就开始学习Android。本系列博客都将围绕Android应用程序设计展开,由于本人是完全没有Android程序设计基础,所以内容都很基础,希望与大家交流学习并得到指点。
加上昨天,总共看了两天Android书,觉得似乎可以写点东西了,于是动手写了个简易计算器,在此总结一下。由于本系列博客主要作为我学习Android的读书笔记,所以写的东西侧重语言,功能相对一般,在后面我将尽我所能增强这个计算器的功能,争取推出一个人工智能版的。
1.Android布局
由于手机作为人的延伸,主要是面对绝对的用户,让他们来打发空闲时间的。基于此,我觉得用户界面UI是个非常重要的方面,而Android的布局Layout是关乎UI的。Android中一共有5种布局:线性布局、表格布局、相对布局、帧布局、绝对布局等等。本次我采用的是表格布局,主要是基于计算器界面的对称性考虑的。可以直接在对应的XLM文件中设计。
3.Android控件
本次一共用了两种控件,文本框TextView、按钮Button。通过为按钮增加监听事件来调用相应的命令,完成预定功能。关于Button有两种使用方法:
a、设置监听器并在监听器中的代码实现中添加事件处理代码来响应事件
bt1.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
//完成功能
}
}
)
b、在XML文件中为按钮的android:onClick的属性制定一个方法来响应事件,如android:onClick="onClickBt1",然后在定义public方法public void onClickBt1(View v)
public void onClickBt1(View v)
{
//完成功能
}
还有菜单menu的使用,比较简单,在此就不说了。
3.运行截图:
目前不支持多次运算,无法表示负数,但可以显示表达式,清0与删除前一位。
4.源代码
package com.example.calculator;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private String opA, opB, opC, show;
private int op;
private TextView tv;
private int flag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
flag = 0;
opA = opB = opC = show = "";
tv = (TextView) findViewById(R.id.tv);
}
public void onClickBt1(View v) {
if (0 == flag)
opA += "1";
else
opB += "1";
show += "1";
tv.setText(show);
}
public void onClickBt2(View v) {
if (0 == flag)
opA += "2";
else
opB += "2";
show += "2";
tv.setText(show);
}
public void onClickBt3(View v) {
if (0 == flag)
opA += "3";
else
opB += "3";
show += "3";
tv.setText(show);
}
public void onClickBt4(View v) {
if (0 == flag)
opA += "4";
else
opB += "4";
show += "4";
tv.setText(show);
}
public void onClickBt5(View v) {
if (0 == flag)
opA += "5";
else
opB += "5";
show += "5";
tv.setText(show);
}
public void onClickBt6(View v) {
if (0 == flag)
opA += "6";
else
opB += "6";
show += "6";
tv.setText(show);
}
public void onClickBt7(View v) {
if (0 == flag)
opA += "7";
else
opB += "7";
show += "7";
tv.setText(show);
}
public void onClickBt8(View v) {
if (0 == flag)
opA += "8";
else
opB += "8";
show += "8";
tv.setText(show);
}
public void onClickBt9(View v) {
if (0 == flag)
opA += "9";
else
opB += "9";
show += "9";
tv.setText(show);
}
public void onClickBt0(View v) {
if (0 == flag)
if (0 == flag)
opA += "0";
else
opB += "0";
show += "0";
tv.setText(show);
}
public void onClickBtAdd(View v) {
flag=1;
show += "+";
op = 1;
tv.setText(show);
}
public void onClickBtSub(View v) {
flag=1;
show += "-";
op = 2;
tv.setText(show);
}
public void onClickBtMul(View v) {
flag=1;
show += "*";
op = 3;
tv.setText(show);
}
public void onClickBtDiv(View v) {
flag=1;
show += "/";
op = 4;
tv.setText(show);
}
public void onClickBtPoint(View v) {
if (0 == flag)
opA += ".";
else
opB += ".";
show += ".";
tv.setText(show);
}
public void onClickBtMod(View v) {
flag=1;
show += "%";
op = 5;
tv.setText(show);
}
public void onClickBtExp(View v) {
flag=1;
show += "^";
op = 6;
tv.setText(show);
}
public void onClickBtBack(View v) {
if (0 == flag && opA.length() != 0) {
opA = opA.substring(0, opA.length() - 1);
show = show.substring(0, show.length() - 1);
} else if (1 == flag) {
if (opB.length() != 0) {
opB = opB.substring(0, opB.length() - 1);
show = show.substring(0, show.length() - 1);
} else {
show = show.substring(0, show.length() - 1);
if(show.length()==opA.length())
flag = 0;
}
}
tv.setText(show);
}
public void onClickBtCE(View v) {
flag = 0;
opA = opB = opC = show = "";
tv.setText(show);
}
public void onClickBtEqual(View v) {
switch (op) {
case 1:
opC = String.valueOf(Double.parseDouble(opA)
+ Double.parseDouble(opB));
break;
case 2:
opC = String.valueOf(Double.parseDouble(opA)
- Double.parseDouble(opB));
break;
case 3:
opC = String.valueOf(Double.parseDouble(opA)
* Double.parseDouble(opB));
break;
case 4:
opC = String.valueOf(Double.parseDouble(opA)
/ Double.parseDouble(opB));
break;
case 5:
opC = String.valueOf(Double.parseDouble(opA)
% Double.parseDouble(opB));
break;
case 6:
opC = String.valueOf(Math.pow(Double.parseDouble(opA),
Double.parseDouble(opB)));
break;
}
show += "\n=" + opC;
tv.setText(show);
flag = 0;
opA = opB = opC = show = "";
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 1, "退出");
menu.add(0, 2, 2, "版权");
menu.add(0, 3, 3, "功能");
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == 1) {
finish();
}
if (item.getItemId() == 2) {
Toast.makeText(MainActivity.this, "作者:晓风残月xj 时间:2014-5-13",
Toast.LENGTH_LONG).show();
}
if (item.getItemId() == 3) {
Toast.makeText(MainActivity.this, "后续有智能版本", Toast.LENGTH_LONG)
.show();
}
return super.onOptionsItemSelected(item);
}
}
如有错误,欢迎斧正!由于初学,水平有限,我把重点放在Android语言的试用,在后面的版本中力争推出一个可与市面上相比的人工智能版本。源码下载请点击源码地址。