Android 简单计算器源码....

PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧...

    顺便去对比了一下别人写的代码...有的使用到了集合框架去实现,我却是用的数组,相比之下实在是有点弱爆了...sad....自己还需要努力啊...

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/calculator"
    android:background="#ffffffff"
    android:orientation="vertical"
    >
    <!-- cursorVisible:表示光标可见..
         1280*800分辨率..
          -->
    <EditText 
        android:id="@+id/et_show"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="right|center_vertical"
        android:cursorVisible="false"
        android:layout_marginTop="4dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:hint="@string/et_show"
        android:layout_gravity="center"
        android:singleLine="true"
        android:textSize="25sp"
        android:textColor="#000000"
        android:layout_weight="1"/>
    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/tablelayout"
        android:layout_weight="10"
        android:layout_marginTop="4dp">
        <LinearLayout 
            android:id="@+id/linerlayout"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1">
            <Button 
                android:id="@+id/clears"
                android:layout_width="60dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textSize="25sp"
                android:text="@string/clears"/>
            <Button 
                android:id="@+id/clearAll"
                android:layout_width="40dip"
                android:layout_height="fill_parent"
                android:text="@string/clearAll"
                android:textSize="25sp"
                android:layout_weight="1"/>
        </LinearLayout>
        <TableRow
            android:id="@+id/row_1"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1">
            <Button 
                android:id="@+id/btn_1"
                android:layout_width="40dip"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_1"
                android:textSize="25sp"
                />
            <Button 
                android:id="@+id/btn_2"
                android:layout_height="fill_parent"
                android:layout_width="40dip"
                android:layout_weight="1"
                android:text="@string/btn_2"
                android:textSize="25sp"/>
            <Button
                android:id="@+id/btn_3" 
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_3"
                android:textSize="20sp"
                />
             <Button 
                 android:id="@+id/btn_add"
                 android:layout_width="40dip"
                 android:layout_height="fill_parent"
                 android:layout_weight="1"
                 android:text="@string/btn_add"
                 android:textSize="25sp"/>
        </TableRow>
        <TableRow
            android:id="@+id/row2"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1">
             <Button 
                 android:id="@+id/btn_4"
                 android:layout_width="40dp"
                 android:layout_height="fill_parent"
                 android:text="@string/btn_4"
                 android:textSize="25sp"
                 android:layout_weight="1"/>
             <Button 
                 android:id="@+id/btn_5"
                 android:layout_width="40dp"
                 android:layout_height="fill_parent"
                 android:text="@string/btn_5"
                 android:textSize="25sp"
                 android:layout_weight="1"/>
             <Button 
                 android:id="@+id/btn_6"
                 android:layout_width="40dp"
                 android:layout_height="fill_parent"
                 android:text="@string/btn_6"
                 android:textSize="25sp"
                 android:layout_weight="1"/>
             <Button 
                 android:id="@+id/btn_sub"
                 android:layout_width="40dp"
                 android:layout_height="fill_parent"
                 android:text="@string/btn_sub"
                 android:textSize="25sp"
                 android:layout_weight="1"/>
        </TableRow>
        <TableRow
            android:id="@+id/row_3"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1">
            <Button
                android:id="@+id/btn_7" 
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_7"
                android:textSize="25sp"
                />
            <Button 
                android:id="@+id/btn_8"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_8"
                android:textSize="25sp"/>
            <Button 
                android:id="@+id/btn_9"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_9"
                android:textSize="25sp"/>
            <Button 
                android:id="@+id/btn_mlt"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_mlt"
                android:textSize="25sp"/>
        </TableRow>
        <TableRow 
            android:id="@+id/row_4"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1">
            <Button 
                android:id="@+id/btn_0"
                android:layout_height="fill_parent"
                android:layout_width="40dp"
                android:layout_weight="1"
                android:text="@string/btn_0"
                android:textSize="25sp"/>
            <Button 
                android:id="@+id/btn_spot"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_spot"
                android:textSize="25sp"/>
            <Button 
                android:id="@+id/btn_tan"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_tan"
                android:textSize="25sp"/>
            <Button 
                android:id="@+id/btn_div"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_div"
                android:textSize="25sp"/>
        </TableRow>    
        <TableRow 
            android:id="@+id/row_5"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1">
            <Button 
                android:id="@+id/btn_square"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_square"
                android:textSize="25sp"/>
            <Button 
                android:id="@+id/btn_sqrt"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_sqrt"
                android:textSize="25sp"/>
            <Button 
                android:id="@+id/btn_sin"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_sin"
                android:textSize="25sp"/>
            <Button 
                android:id="@+id/btn_cos"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_cos"
                android:textSize="25sp"/>
        </TableRow>
         <TableRow 
            android:id="@+id/row_6"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1">
             <Button 
                android:id="@+id/btn_cot"
                android:layout_width="60dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_cot"
                android:textSize="25sp"/>
              <Button 
                android:id="@+id/btn_equal"
                android:layout_width="40dp"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="@string/btn_equal"
                android:textSize="25sp"/>
          </TableRow>
     </TableLayout>
</LinearLayout>
View Code

上面这个就是布局文件了...这个布局在不同的分辨率的屏幕上,显示是有所区别的...不过应该差别不是很大.....

接着就是src下的MainActivity文件了....注释掉的地方,大家可以直接略过....今天再次优化了一下,上次的代码有点冗余....

package com.example.android_calculator;

import java.lang.annotation.Target;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import android.widget.EditText;

public class MainActivity extends Activity {

    String str = "";
    double result = 0, num1 = 0, num2 = 0;
    int sign = 0, flag = 0;
    View vi;
    EditText et_show;
    Button but_num[] = new Button[10];
    Button but_mark[] = new Button[14];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_show = (EditText) findViewById(R.id.et_show);
        et_show.setKeyListener(null);
        int i;
        int j;
        int[] btn_id = new int[] { R.id.btn_add, R.id.btn_sub, R.id.btn_mlt,
                R.id.btn_div, R.id.btn_equal, R.id.btn_spot, R.id.btn_sin,
                R.id.btn_cos, R.id.btn_tan, R.id.btn_cot, R.id.btn_square,
                R.id.btn_sqrt, R.id.clears, R.id.clearAll };
        for (i = 0; i < but_num.length; i++) {
            String btnid = "btn" + "_" + i;
            int resID = getResources().getIdentifier(btnid, "id",
                    "com.example.android_calculator");
            but_num[i] = (Button) findViewById(resID);
            but_num[i].setOnClickListener(new onclicklistener());
        }
        for (j = 0; j < but_mark.length; j++) {
            but_mark[j] = (Button) findViewById(btn_id[j]);
            but_mark[j].setOnClickListener(new onclicklistener());
        }
    }

    public double calculater() {
        switch (sign) {
        case 0:
            result = num2;
            break;
        case 1:
            result = num1 + num2;
            break;
        case 2:
            result = num1 - num2;
            break;
        case 3:
            result = num1 * num2;
            break;
        case 4:
            result = num1 / num2;
            break;
        }
        num1 = result;
        sign = 0;
        return result;
    }

    public void click_num(int num) {
        int o = 0;
        if (num == 0) {
            if (flag == 1) {
                str = "";
                str += 0;
                et_show.setText(str);
                flag = 0;
            } else {
                char ch1[];
                ch1 = str.toCharArray();
                if (!(ch1.length == 1 && ch1[0] == '0')) {
                    str += 0;
                    et_show.setText(str);
                }
            }
        } else {
            for (o = 1; o < 10; o++) {
                if (o == num) {
                    if (flag == 1) {
                        str = "";
                        str += o;
                        et_show.setText(str);
                        flag=0;
                    }else{
                        str+=o;
                        et_show.setText(str);
                    }
                }
            }
        }
    }
    public void click_mark(int num, View vv){
        if(str!=""){
            if(vi==but_mark[num]){
                sign=num+1;
            }else{
                num2=Double.parseDouble(str);
                calculater();
                str=""+result;
                et_show.setText(str);
                sign=num+1;
                flag=1;
                vi=vv;
            }
        }
    }
    class onclicklistener implements OnClickListener {
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.btn_0: {
                click_num(0);
                vi = v;
                break;
            }
            case R.id.btn_1: {
                click_num(1);
                vi = v;
                break;
            }
            case R.id.btn_2: {
                click_num(2);
                vi = v;
                break;
            }
            case R.id.btn_3: {
                click_num(3);
                vi = v;
                break;
            }
            case R.id.btn_4: {
                click_num(4);
                vi = v;
                break;
            }
            case R.id.btn_5: {
                click_num(5);
                vi = v;
                break;
            }
            case R.id.btn_6: {
                click_num(6);
                vi = v;
                break;
            }
            case R.id.btn_7: {
                click_num(7);
                vi = v;
                break;
            }
            case R.id.btn_8: {
                click_num(8);
                vi = v;
                break;
            }
            case R.id.btn_9: {
                click_num(9);
                vi = v;
                break;
            }
            case R.id.btn_add: {
                click_mark(0,v);
                break;
            }
            case R.id.btn_sub: {
                click_mark(1,v);
                break;
            }
            case R.id.btn_mlt: {
                click_mark(2,v);
                break;
            }
            case R.id.btn_div: {
                click_mark(3,v);
                break;
            }
            case R.id.btn_spot: {
                str = str + ".";
                et_show.setText(str);
                break;
            }
            case R.id.btn_equal: {
                if (str != "" && vi != but_mark[0] && vi != but_mark[1]
                        && vi != but_mark[2] && vi != but_mark[3]) {
                    num2 = Double.parseDouble(str);
                    calculater();
                    str = "" + result;
                    et_show.setText(str);
                    flag = 1;
                    vi = v;
                }
                break;
            }
            case R.id.btn_sqrt: {
                if (str != "") {
                    num2 = Double.parseDouble(str);
                    result = Math.sqrt(num2);
                    str = "" + result;
                    et_show.setText(str);
                }
                break;
            }
            case R.id.btn_square: {
                if (str != "") {
                    num2 = Double.parseDouble(str);
                    result = num2 * num2;
                    str = "" + result;
                    et_show.setText(str);
                }
                break;
            }
            case R.id.btn_sin: {
                if (str != "") {
                    num2 = Double.parseDouble(str);
                    result = Math.sin(num2);
                    str = "" + result;
                    et_show.setText(str);
                }
                break;
            }
            case R.id.btn_cos: {
                if (str != "") {
                    num2 = Double.parseDouble(str);
                    result = Math.cos(num2);
                    str = "" + result;
                    et_show.setText(str);
                }
                break;
            }
            case R.id.btn_tan: {
                if (str != "") {
                    num2 = Double.parseDouble(str);
                    result = Math.tan(num2);
                    str = "" + result;
                    et_show.setText(str);
                }
                break;
            }
            case R.id.btn_cot: {
                if (str != "") {
                    num2 = Double.parseDouble(str);
                    result = (1 / Math.tan(num2));
                    str = "" + result;
                    et_show.setText(str);
                }
                break;
            }
            case R.id.clears: {
                str = "";
                et_show.setText(str);
                vi = v;
                break;
            }
            case R.id.clearAll: {
                num1 = 0.0;
                num2 = 0;
                result = 0.0;
                str = "";
                et_show.setText(str);
            }
            }
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        menu.add(0, 1, 1, "退出");
        return super.onCreateOptionsMenu(menu);
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == 1) {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}
View Code

这里我注释掉的地方大家是不用看的...因为原本我是打算使用开源框架butterknife去实现findViewById()方法...觉得那样做会稍微的减少一下代码的书写量...但是没有实现成功,虽然是界面可以成功的显示,但是所有的按钮都无法被触发监听...如果有哪位大神明白的,请您指教我一下,小弟将感激不尽...

然后就是string.xml文件了.....

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

    <string name="app_name">Android_calculator</string>
    <string name="menu_settings">退出</string>
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="et_show">show</string>
    <string name="clears">C</string>
    <string name="clearAll">清除</string>
    <string name="btn_1">1</string>
    <string name="btn_2">2</string>
    <string name="btn_3">3</string>
    <string name="btn_add">+</string>
    <string name="btn_4">4</string>
    <string name="btn_5">5</string>
    <string name="btn_6">6</string>
    <string name="btn_sub">-</string>
    <string name="btn_7">7</string>
    <string name="btn_8">8</string>
    <string name="btn_9">9</string>
    <string name="btn_mlt">*</string>
    <string name="btn_0">0</string>
    <string name="btn_spot">.</string>
    <string name="btn_equal">=</string>
    <string name="btn_div">/</string>
    <string name="btn_square">x^2</string>
    <string name="btn_sqrt">√x</string>
    <string name="btn_sin">sin</string>
    <string name="btn_cos">cos</string>
    <string name="btn_tan">tan</string>
    <string name="btn_cot">cot</string>
</resources>

这个文件相对就比较简单了....没什么过多的东西...下面这个是我自己源代码的全地址...很简单的东西....

 http://files.cnblogs.com/files/RGogoing/Android_calculator.zip

再发一个高端的....这个用到了集合框架...写的挺好的....相比之下我上面那个就是个渣渣...

 http://files.cnblogs.com/files/RGogoing/fxmjsjym_a5.zip

原文地址:https://www.cnblogs.com/RGogoing/p/4536457.html