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

你可能感兴趣的:(android)