Android计算器开发实例

来源:互联网 发布:订货系统源码 编辑:程序博客网 时间:2024/04/19 21:34
Android计算器开发实例
 最近迷上了安卓开发, 自己做了个web浏览器,很好用,现在想做一个简单的计算器程序员,熟悉安卓的编程基础。下面我们来一起看一下吧。let`s go!
 
 
Android计算器开发实例
main.xml代码
<?xml version="1.0" encoding="utf-8"?> 
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:textSize="42sp" android:stretchColumns="1"> 
    <TableRow> 
        <EditText android:id="@+id/result" android:layout_width="fill_parent" 
            android:layout_height="wrap_content" 
            android:background="@android:drawable/editbox_background" 
            android:layout_span="4" android:textSize="48sp" android:gravity="right|center_vertical" 
            android:cursorVisible="false" android:editable="false" android:lines="1" /> 
    </TableRow> 
    <TableRow> 
        <LinearLayout android:orientation="horizontal" 
            android:layout_width="fill_parent" android:layout_height="wrap_content" 
            android:textSize="42sp" android:layout_weight="1"> 
            <Button android:id="@+id/num7" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="7" android:layout_weight="1" /> 
            <Button android:id="@+id/num8" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="8" android:layout_weight="1" /> 
            <Button android:id="@+id/num9" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="9" android:layout_weight="1" /> 
            <Button android:id="@+id/divide" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="/" android:layout_weight="1" /> 
        </LinearLayout> 
    </TableRow> 
    <TableRow> 
        <LinearLayout android:orientation="horizontal" 
            android:layout_width="fill_parent" android:layout_height="wrap_content" 
            android:textSize="42sp" android:layout_weight="1"> 
            <Button android:id="@+id/num4" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="4" android:layout_weight="1" /> 
            <Button android:id="@+id/num5" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="5" android:layout_weight="1" /> 
            <Button android:id="@+id/num6" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="6" android:layout_weight="1" /> 
            <Button android:id="@+id/multiply" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="*" android:layout_weight="1" /> 
        </LinearLayout> 
    </TableRow> 
    <TableRow> 
        <LinearLayout android:orientation="horizontal" 
            android:layout_width="fill_parent" android:layout_height="wrap_content" 
            android:textSize="42sp" android:layout_weight="1"> 
            <Button android:id="@+id/num1" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="1" android:layout_weight="1" /> 
            <Button android:id="@+id/num2" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="2" android:layout_weight="1" /> 
            <Button android:id="@+id/num3" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="3" android:layout_weight="1" /> 
            <Button android:id="@+id/subtract" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="-" android:layout_weight="1" /> 
        </LinearLayout> 
    </TableRow> 
    <TableRow> 
        <LinearLayout android:orientation="horizontal" 
            android:layout_width="fill_parent" android:layout_height="wrap_content" 
            android:textSize="42sp" android:layout_weight="1"> 
            <Button android:id="@+id/num0" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="0" android:layout_weight="1" /> 
            <Button android:id="@+id/point" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="." android:layout_weight="1" /> 
            <Button android:id="@+id/add" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="+" android:layout_weight="1" /> 
            <Button android:id="@+id/equal" android:layout_width="fill_parent" 
                android:layout_height="wrap_content" android:textSize="42sp" 
                android:text="=" android:layout_weight="1" /> 
        </LinearLayout> 
    </TableRow> 
    <TableRow> 
        <Button android:id="@+id/clear" android:layout_width="fill_parent" 
            android:layout_height="wrap_content" android:textSize="30sp" 
            android:text="clear" android:layout_span="4" android:gravity="center_vertical|center_horizontal"/> 
    </TableRow> 
</TableLayout> 

 
package com.hello.cn;
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
public class calculator extends Activity { 
    private Button[] btnNum = new Button[11];// 数值按钮  
    private Button[] btnCommand = new Button[5];// 符号按钮  
    private EditText editText = null;// 显示区域  
    private Button btnClear = null; // clear按钮  
    private String lastCommand; // 用于保存运算符  
    private boolean clearFlag; // 用于判断是否清空显示区域的值,true需要,false不需要  
    private boolean firstFlag; // 用于判断是否是首次输入,true首次,false不是首次  
    private double result; // 计算结果  
    public calculator() { 
        // 初始化各项值  
        result = 0; // x的值  
        firstFlag = true; // 是首次运算  
        clearFlag = false; // 不需要清空  
        lastCommand = "="; // 运算符  
    } 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        // 获取运算符  
        btnCommand[0] = (Button) findViewById(R.id.add); 
        btnCommand[1] = (Button) findViewById(R.id.subtract); 
        btnCommand[2] = (Button) findViewById(R.id.multiply); 
        btnCommand[3] = (Button) findViewById(R.id.divide); 
        btnCommand[4] = (Button) findViewById(R.id.equal); 
        // 获取数字  
        btnNum[0] = (Button) findViewById(R.id.num0); 
        btnNum[1] = (Button) findViewById(R.id.num1); 
        btnNum[2] = (Button) findViewById(R.id.num2); 
        btnNum[3] = (Button) findViewById(R.id.num3); 
        btnNum[4] = (Button) findViewById(R.id.num4); 
        btnNum[5] = (Button) findViewById(R.id.num5); 
        btnNum[6] = (Button) findViewById(R.id.num6); 
        btnNum[7] = (Button) findViewById(R.id.num7); 
        btnNum[8] = (Button) findViewById(R.id.num8); 
        btnNum[9] = (Button) findViewById(R.id.num9); 
        btnNum[10] = (Button) findViewById(R.id.point); 
        // 初始化显示结果区域  
        editText = (EditText) findViewById(R.id.result); 
        editText.setText("0.0"); 
        // 实例化监听器对象  
        NumberAction na = new NumberAction(); 
        CommandAction ca = new CommandAction(); 
        for (Button bc : btnCommand) { 
            bc.setOnClickListener(ca); 
        } 
        for (Button bc : btnNum) { 
            bc.setOnClickListener(na); 
        } 
        // clear按钮的动作  
        btnClear = (Button) findViewById(R.id.clear); 
        btnClear.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View view) { 
                editText.setText("0.0"); 
                // 初始化各项值  
                result = 0; // x的值  
                firstFlag = true; // 是首次运算  
                clearFlag = false; // 不需要清空  
                lastCommand = "="; // 运算符  
            } 
        }); 
    } 
    // 数字按钮监听器  
    private class NumberAction implements OnClickListener { 
        @Override 
        public void onClick(View view) { 
            Button btn = (Button) view; 
            String input = btn.getText().toString(); 
            if (firstFlag) { // 首次输入  
                // 一上就".",就什么也不做  
                if (input.equals(".")) { 
                    return; 
                } 
                // 如果是"0.0"的话,就清空  
                if (editText.getText().toString().equals("0.0")) { 
                    editText.setText(""); 
                } 
                firstFlag = false;// 改变是否首次输入的标记值  
            } else { 
                String editTextStr = editText.getText().toString(); 
                // 判断显示区域的值里面是否已经有".",如果有,输入的又是".",就什么都不做  
                if (editTextStr.indexOf(".") != -1 && input.equals(".")) { 
                    return; 
                } 
                // 判断显示区域的值里面只有"-",输入的又是".",就什么都不做  
                if (editTextStr.equals("-") && input.equals(".")) { 
                    return; 
                } 
                // 判断显示区域的值如果是"0",输入的不是".",就什么也不做  
                if (editTextStr.equals("0") && !input.equals(".")) { 
                    return; 
                } 
            } 
            // 如果我点击了运算符以后,再输入数字的话,就要清空显示区域的值  
            if (clearFlag) { 
                editText.setText(""); 
                clearFlag = false;// 还原初始值,不需要清空  
            } 
            editText.setText(editText.getText().toString() + input);// 设置显示区域的值  
        } 
    } 
    // 符号按钮监听器  
    private class CommandAction implements OnClickListener { 
        @Override 
        public void onClick(View view) { 
            Button btn = (Button) view; 
            String inputCommand = (String) btn.getText(); 
            if (firstFlag) {// 首次输入"-"的情况  
                if (inputCommand.equals("-")) { 
                    editText.setText("-");// 显示区域的内容设置为"-"  
                    firstFlag = false;// 改变首次输入的标记  
                } 
            } else { 
                if (!clearFlag) {// 如果flag=false不需要清空显示区的值,就调用方法计算  
                   calculate(Double.parseDouble(editText.getText().toString()));// 保存显示区域的值,并计算  
                } 
                // 保存你点击的运算符  
                lastCommand = inputCommand; 
                clearFlag = true;// 因为我这里已经输入过运算符,  
            } 
        } 
    } 
    // 计算用的方法  
    private 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; 
        } else if (lastCommand.equals("=")) { 
            result = x; 
        } 
        editText.setText("" + result); 
    } 

0 0
原创粉丝点击