Android开发之计算器

 

Android开发之计算器

这几天,根据自己学习的进程,制作了一个简单的计算器。也算是,学习这么久,第一个处女作品吧!呵呵,下面跟大家分享下,先来看下,运行效果:

Android开发之计算器_第1张图片

下面,就来跟大家分享下,开发过程及需要注意的事项。

1、  创建Android项目,命名为Calculator;

2、  修改main.xml布局文件,下面我简单的说先文件的布局。在这里我采用了TableLayout布局方式。最上面,我弄了个TextView用于显示计算的结果,接下来就是按钮了!这个写都好简单,到时可以去看下代码。呵呵。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/silver"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:paddingLeft="10px"
    android:paddingTop="5px"
    android:paddingRight="10px">
<TableLayout 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="*">
   <TableRow
      android:id="@+id/tableRow01"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_margin="1px" >
      <TextView
         android:id="@+id/result"
         android:layout_width="fill_parent"
         android:layout_height="40px"
         android:text="0.0"
         android:textColor="@drawable/black"
         android:gravity="right"
         android:textSize="18px"/>
   </TableRow>
</TableLayout>
<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="*"
    android:paddingTop="10px">
   <TableRow
      android:id="@+id/tableRow02"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text=""/>
      <Button
         android:id="@+id/back"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="Back"/>
      <Button
         android:id="@+id/delete"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="Delete"/>
      <Button
         android:id="@+id/clear"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="Clear"/>
   </TableRow>
    <TableRow
      android:id="@+id/tableRow03"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      <Button
         android:id="@+id/mc"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="MC"/>
      <Button
         android:id="@+id/mr"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="MR"/>
      <Button
         android:id="@+id/mj"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="M-"/>
      <Button
         android:id="@+id/mz"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="M+"/>
   </TableRow>
    <TableRow
      android:id="@+id/tableRow04"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      <Button
         android:id="@+id/qi"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="7"/>
      <Button
         android:id="@+id/ba"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="8"/>
      <Button
         android:id="@+id/jiu"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="9"/>
      <Button
         android:id="@+id/chu"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="/"/>
   </TableRow>
    <TableRow
      android:id="@+id/tableRow05"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      <Button
         android:id="@+id/si"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="4"/>
      <Button
         android:id="@+id/wu"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="5"/>
      <Button
         android:id="@+id/liu"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="6"/>
      <Button
         android:id="@+id/cheng"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="*"/>
   </TableRow>
    <TableRow
      android:id="@+id/tableRow06"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      <Button
         android:id="@+id/yi"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="1"/>
      <Button
         android:id="@+id/er"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="2"/>
      <Button
         android:id="@+id/san"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="3"/>
      <Button
         android:id="@+id/jian"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="-"/>
   </TableRow>
    <TableRow
      android:id="@+id/tableRow07"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content">
      <Button
         android:id="@+id/ling"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ff0000ff"
         android:text="0"/>
      <Button
         android:id="@+id/dian"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="."/>
      <Button
         android:id="@+id/deng"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="="/>
      <Button
         android:id="@+id/jia"
         android:layout_width="70px"
         android:layout_height="wrap_content"
         android:textColor="#ffff0000"
         android:text="+"/>
   </TableRow>
</TableLayout>
</LinearLayout>

3、  大家仔细看下,我们最上面用于显示计算结果的TextView有什么不同?对,就是外面多了边框。呵呵,为什么要弄这个边框呢?我感觉,做一个应用,美观方面是一个让人容易接受的重要因素。所以大家不要只求简单!美观是不容忽视的!呵呵,下面我们来讲下,这个边框的实现。

(1)       首先在res/drawable-mdpi目录下新建一个shape.xml文件

(2)       编写shape.xml文件的代码如下:

 

<?xml version="1.0" encoding="utf-8"?>
		<shape xmlns:android="http://schemas.android.com/apk/res/android">
			<gradient
				android:startColor="#FFFFFF"
				android:endColor="#FFFFFF"
				android:angle="0"/>
			<stroke
				android:width="5px"
				android:color="#DEDCD2"/>
			<padding
				android:top="8dp"
				android:bottom="8dp"
				android:right="8dp"/>
         </shape>


在这里我们使用了shap自定义图形,不懂的话,可以看前面我的Android开发之shape自定义图形一文,里面讲的很清楚,在这里,就不啰嗦了。

4、  修改主程序代码,具体代码如下:

public class Calculator extends Activity implements OnClickListener{
	public float result; // 计算结果  
	TextView showResult;//显示计算的结果
	Button[] number;//数字数字包含点
	Button[] command;//符号数组
	Button BackButton,DeleteButton,ClearButton;//操作按钮
	Button MCButton,MRButton,MPButton,MMButton;
	public String lastCommand; // 用于保存运算符   
	public boolean clearFlag; // 用于判断是否清空显示区域的值,true需要,false不需要   
	public boolean firstFlag; // 用于判断是否是首次输入,true首次,false不是首次  
	public Calculator(){//初始化变量
		result=0;
		clearFlag=false;
		firstFlag=true;
		lastCommand="=";}
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        showResult=(TextView)findViewById(R.id.result);//实例化显示计算结果TextView
        showResult.setBackgroundResource(R.drawable.shape);//设置背景,让它有边框
        //数字数组
        number=new Button[11];
        number[0]=(Button)findViewById(R.id.ling);
        number[1]=(Button)findViewById(R.id.yi);
        number[2]=(Button)findViewById(R.id.er);
        number[3]=(Button)findViewById(R.id.san);
        number[4]=(Button)findViewById(R.id.si);
        number[5]=(Button)findViewById(R.id.wu);
        number[6]=(Button)findViewById(R.id.liu);
        number[7]=(Button)findViewById(R.id.qi);
        number[8]=(Button)findViewById(R.id.ba);
        number[9]=(Button)findViewById(R.id.jiu);
        number[10]=(Button)findViewById(R.id.dian);
        //运算符数组
        command=new Button[5];
        command[0]=(Button)findViewById(R.id.jia);
        command[1]=(Button)findViewById(R.id.jian);
        command[2]=(Button)findViewById(R.id.cheng);
        command[3]=(Button)findViewById(R.id.chu);
        command[4]=(Button)findViewById(R.id.deng);
        //为每个数字按钮注册按钮单击事件
        NumberAction na=new NumberAction();
        for(Button bc:number){
        	bc.setOnClickListener(na);}
        //为每个操作符号按钮注册按钮单击事件
        CommandAction ca=new CommandAction();
        for(Button bc:command){
        	bc.setOnClickListener(ca);}
        //实例化按钮
        ClearButton=(Button)findViewById(R.id.clear);
        BackButton=(Button)findViewById(R.id.back);
        DeleteButton=(Button)findViewById(R.id.delete);
        //为按钮注册单击事件
        ClearButton.setOnClickListener(this);
        BackButton.setOnClickListener(this);
        DeleteButton.setOnClickListener(this);
    }
    public void calculate(double x){ //计算函数
    	if(lastCommand.equals("+"))
    	{
    		result+=x;
    	}
    	else if(lastCommand.equals("-"))
    	{
    		result-=x;
    	}
    	else if(lastCommand.equals("*"))
    	{
    		result*=x;
    	}
    	else if(lastCommand.equals("/"))
    	{
    		result/=x;
    	}
    	showResult.setText(""+result);
    }
	public void onClick(View v) {//按钮单击处理
		switch(v.getId()){
		case R.id.clear://当单击了Clear按钮后
			showResult.setText("0.0");
			result=0;
			clearFlag=false;
			firstFlag=true;
			lastCommand="=";
			break;
		}
	}
	private class NumberAction implements OnClickListener{//数字事件注册类
		public void onClick(View v) {
			Button btn=(Button)v;
			String input=btn.getText().toString();//取得单击该按钮的值
			if(firstFlag){//如果是第一次输入
				if(input.equals(".")){//判断如果第一次输入是".",则不做任何事
					return;
				}
				if(showResult.getText().toString().equals("0.0")){
					showResult.setText("");
				}
				result=Float.parseFloat(input);
				firstFlag=false;
			}
			else{//如果不是第一次输入
				String text=showResult.getText().toString();//取得先前的内容
				//判断内容中是否有“.”,如果有,下一步输入的又是".",则不做什么
				if(text.indexOf(".")!=-1 && input.equals(".")){
					return;
				}
				//判断内容是不是等于"=",如果是,并且即将输入的是".",则不允许
				if(text.equals("-") && input.equals(".")){
					return;
				}
				//判断内容是不是等于"=",如果是,并且即将输入的不是".",则把输入的值赋给result,比如result=-6;
				if(text.equals("-") && !input.equals(".")){
					result=Float.parseFloat("-"+input);
				}
				//判断内容是不是等于"0",如果是,并且即将输入的不是".",则不允许
				if(text.equals("0") && !input.equals(".")){
					return;
				}
			}
			if(clearFlag){
				showResult.setText("");
				clearFlag=false;
			}
			showResult.setText(showResult.getText().toString()+input);//显示内容
		}
	}
	private class CommandAction implements OnClickListener{//符号操作等按钮的注册事件
		public void onClick(View v) {
			Button btn=(Button)v;
			String inputCommand=(String)btn.getText();//取得按钮上的值
			if(firstFlag){//判断是否是第一次输入
				if(inputCommand.equals("-")){//如果是,如果输入的是"-"
					showResult.setText("-");//则把showResult内容设置为"-"
					firstFlag=false;
				}
			}
			else{//如果不是第一次输入
				if(!clearFlag){
					calculate(Double.parseDouble(showResult.getText().toString()));
				}
				lastCommand=inputCommand;
			    clearFlag=true;
			}
		}
	}
}


 

5、  到此,整个项目已开发完毕。单击运行便会得到以上效果。

程序的操作,在这里说下,单击数字按钮,可以输入数字,单击运算符,可以进行相关运算,然后就是单击Clear按钮,可以清除先前的数据,从头开始计算。在这里我有必要说一下。这个项目,作为计算器,基本内容都已实现。只是还有一些单击按钮事件,还没处理!还有就是程序本身还存在一些不足之处,比如在处理小数运算时,呵呵,在这里就卖个官司。就当给大家一个课后作业。呵呵!(其实我也还没开发)嘿嘿。好了,今天,就到这里。下次见!

你可能感兴趣的:(android,command,layout,input,button,encoding)