• 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

  • 相关阅读:
    Eclipse
    svn 常用
    spidermonkey编译
    float format 显示
    点击6次修改服务器地址
    UITextField字数限制
    UINavigationController
    运行时runtime
    IOS 技术与面试
    Cocos2dx笔记
  • 原文地址:https://www.cnblogs.com/RGogoing/p/4536457.html
Copyright © 2020-2023  润新知