天天看点

android计算器开发

注:现在对于eclipse开发的android项目可以直接导入到androidstudio中。

android开发初学的第一个程序:

1.先构建android项目

2.构建出简单的计算器界面

3.对按键布局进行动作监听设置,并作出相应的反馈操作

4.打开虚拟机调试程序

操作1得到如下:

android计算器开发

操作2之后:

android计算器开发

对于计算器的背景图片是我自己添加的,需要把该图片复制到res/drawable开头的文件夹下,每个都要。

布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bgi"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <TableLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:gravity="center_horizontal" >
        
    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="输入:" />
    
    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_alignLeft="@+id/button17"
        android:layout_below="@+id/textView1"
        android:background="#666"
        android:ems="10"
        android:gravity="center_vertical|right" 
        android:singleLine="true"
        android:textColor="#000"
        android:textSize="28dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="结果:" />
        
     <TextView
         android:id="@+id/textView1"
         android:layout_width="wrap_content"
         android:layout_height="50dp"
         android:layout_alignLeft="@+id/editText1"
         android:layout_alignParentTop="true"
         android:layout_alignRight="@+id/editText1"
         android:layout_marginBottom="10dp"
         android:background="#666"
         android:text=" "
         android:textAppearance="?android:attr/textAppearanceLarge"
         android:textColor="#fff"
         android:textSize="15dp"
         android:gravity="center_vertical|right"  />



        <TableRow
            android:id="@+id/tableRow1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:gravity="center_horizontal" >

            <Button
                android:id="@+id/button_CE"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_CE" />

            <Button
                android:id="@+id/button_DELETE"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_DELETE" />

            <Button
                android:id="@+id/button_XX"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_XX" />

            <Button
                android:id="@+id/button_ADD"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_ADD" />

        </TableRow>

        <TableRow
            android:id="@+id/tableRow2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:gravity="center_horizontal" >
            
            <Button
                android:id="@+id/button_1"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_1" />

            <Button
                android:id="@+id/button_2"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_2" />

            <Button
                android:id="@+id/button_3"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_3" />

            <Button
                android:id="@+id/button_SUB"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_SUB" />
        </TableRow>

        <TableRow
            android:id="@+id/tableRow3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:gravity="center_horizontal" >
            
            <Button
                android:id="@+id/button_4"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_4" />

            <Button
                android:id="@+id/button_5"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_5" />

            <Button
                android:id="@+id/button_6"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_6" />

            <Button
                android:id="@+id/button_MUL"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_X" />
        </TableRow>

        <TableRow
            android:id="@+id/tableRow4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:gravity="center_horizontal" >
            
            <Button
                android:id="@+id/button_7"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_7" />

            <Button
                android:id="@+id/button_8"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_8" />

            <Button
                android:id="@+id/button_9"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_9" />

            <Button
                android:id="@+id/button_DEV"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_DEV" />
        </TableRow>

        

    </TableLayout>
<TableRow
            android:id="@+id/tableRow5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:layout_marginBottom="5dp"
            android:gravity="center_horizontal" >
            
            <Button
                android:id="@+id/button_dot"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_dot" />

            <Button
                android:id="@+id/button_0"
                android:layout_width="80dp"
                android:layout_height="60dp"
                android:text="@string/button_0" />
            
            <Button
                android:id="@+id/button_EQU"
                android:layout_width="160dp"
                android:layout_height="60dp"
                android:text="@string/button_EQU" />

        </TableRow>
</LinearLayout>
           

res/values/strings.xml下的代码:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Caculator</string>
    <string name="hello_world">Hello world!</string>
    <string name="button_CE">CE</string>
    <string name="button">DELETE</string>
    <string name="button_DELETE">DEL</string>
    <string name="button_XX">x²</string>
    <string name="button_ADD">+</string>
    <string name="button_1">1</string>
    <string name="button_2">2</string>
    <string name="button_3">3</string>
    <string name="button_SUB">-</string>
    <string name="button_4">4</string>
    <string name="button_5">5</string>
    <string name="button_6">6</string>
    <string name="button_X">×</string>
    <string name="button_7">7</string>
    <string name="button_8">8</string>
    <string name="button_9">9</string>
    <string name="button_DEV">÷</string>
    <string name="button_0">0</string>
    <string name="button_dot">.</string>
    <string name="button_EQU">=</string>

</resources>
           

接下来就是对已经布局好的案件操作进行监听并对响应的操作进行反馈:

src/Mainactivity.java文件:

package com.example.caculator;

import java.util.Arrays;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import bsh.EvalError;
import bsh.Interpreter;

public class MainActivity extends Activity {
	
	//声明变量
	private Button button_1;
	private Button button_2;
	private Button button_3;
	private Button button_4;
	private Button button_5;
	private Button button_6;
	private Button button_7;
	private Button button_8;
	private Button button_9;
	private Button button_0;
	private Button button_dot;
	private Button button_ADD;
	private Button button_SUB;
	private Button button_MUL;
	private Button button_DEV;
	private Button button_EQU;
	private Button button_DEL;
	private Button button_XX;
	private Button button_CE;
	
	private EditText edittext;
	static TextView textview;
	static String password="";
	static int index;
	
	
	boolean isClear = false; //用于记录依稀
	/***
	 * @param  exp 算数表达式
	 * @return 根据表达式返回结果
	 */
	private String getRs(String exp){
			Interpreter bsh = new Interpreter();
	        Number result = null;
			try {
				exp = filterExp(exp);
				result = (Number)bsh.eval(exp);
			} catch (EvalError e) {
				e.printStackTrace();
				isClear = true;
				return "算数公式错误";
			}        
			return result.doubleValue()+"";
	}

		
	/**
	 * @param exp 算数表达式
	 * @return 因为计算过程中,全程需要有小数参与.
	 */
	private String filterExp(String exp) {
		String num[] = exp.split("");
		String temp = null;
		int begin=0,end=0;
		 for (int i = 1; i < num.length; i++) {
			 temp = num[i];
			 if(temp.matches("[+-/()*]")){
				 if(temp.equals(".")) continue;
				 end = i - 1;  
				 temp = exp.substring(begin, end);
				 if(temp.trim().length() > 0 && temp.indexOf(".")<0)
					 num[i-1] = num[i-1]+".0";
				 begin = end + 1;
			 }
		 }
		 return Arrays.toString(num).replaceAll("[\\[\\], ]", "");
	}
	

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//获取对象引用
		button_1=(Button) this.findViewById(R.id.button_1);
		button_2=(Button) this.findViewById(R.id.button_2);
		button_3=(Button) this.findViewById(R.id.button_3);
		button_4=(Button) this.findViewById(R.id.button_4);
		button_5=(Button) this.findViewById(R.id.button_5);
		button_6=(Button) this.findViewById(R.id.button_6);
		button_7=(Button) this.findViewById(R.id.button_7);
		button_8=(Button) this.findViewById(R.id.button_8);
		button_9=(Button) this.findViewById(R.id.button_9);
		button_0=(Button) this.findViewById(R.id.button_0);
		button_dot=(Button) this.findViewById(R.id.button_dot);
		button_ADD=(Button) this.findViewById(R.id.button_ADD);
		button_SUB=(Button) this.findViewById(R.id.button_SUB);
		button_MUL=(Button) this.findViewById(R.id.button_MUL);
		button_DEV=(Button) this.findViewById(R.id.button_DEV);
		button_EQU=(Button) this.findViewById(R.id.button_EQU);
		button_DEL=(Button) this.findViewById(R.id.button_DELETE);
		button_XX=(Button) this.findViewById(R.id.button_XX);
		button_CE=(Button) this.findViewById(R.id.button_CE);
		
		edittext=(EditText) this.findViewById(R.id.editText1);
		textview=(TextView) this.findViewById(R.id.textView1);
		
		
		button_1.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="1";
				edittext.setText(password);
				edittext.setSelection(password.length());//将光标定位到最右边
//				textview.setText(password);

			} 
		});
		
		button_2.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				password+="2";
				edittext.setText(password);
				edittext.setSelection(password.length());

			} 
		});
		
		button_3.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="3";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_4.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="4";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_5.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="5";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_6.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="6";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_7.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="7";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_8.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="8";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_9.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="9";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_0.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="0";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_dot.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+=".";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		 
		button_ADD.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="+";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_SUB.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="-";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_MUL.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password+="×";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_DEV.setOnClickListener(new View.OnClickListener() {
			
			public void onClick(View v) {
				password+="÷";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
		
		button_EQU.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//计算
				//-----------------------------------------------------
				String exp=password;
				exp = exp.replaceAll("×", "*");
				exp = exp.replaceAll("÷", "/");
//				textview.setText(exp);
				if(exp==null || exp.trim().length()==0)
					return; 
				exp = getRs(exp);

				textview.setText(exp); 
				isClear = false;
				//-----------------------------------------------------
			} 
		});
		
		button_CE.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password="";
				edittext.setText(password);
				textview.setText("");
			} 
		});
		
		button_DEL.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				
				if(password.length()>0){
				password=password.substring(0,password.length()-1);
				}
//				else {
//					password=password;
//				}
				edittext.setText(password);
				edittext.setSelection(password.length());
			}
		});
		
		button_XX.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				password="("+password+")"+"×"+"("+password+")";
				edittext.setText(password);
				edittext.setSelection(password.length());
			} 
		});
	}
}  
           

4.最后得到的程序运行:

android计算器开发

程序中其实还有不完善的地方:

1.对于程序中使用String类型来处理得到按键字符,对每一次的操作是在字符串后面进行+操作,对于String字符串拼接性能并不高

每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以现阶段对于经常变化的字符串建议使用Stringbuilder。

2.对于计算还有不精确的地方(先还没有进行优化)。

大家可以下载玩玩:http://pan.baidu.com/s/1slm8T1F

继续阅读