位置: 首页>> 仿Android原生计算器程序编写实例

仿Android原生计算器程序编写实例

一.界面布局

计算器

  1. main.xml布局文件代码实现如下:

按钮图片是自己做的,当然你也可以直接用Button

<?xml version=“1.0” encoding=“utf-8”?>

<TableLayout xmlns:android=“http://schemas.android.com/apk/res/android”

    android:orientation=“vertical” android:layout_width=“fill_parent”

    android:layout_height=“fill_parent”>

    <EditText android:id=“@+id/text” android:layout_width=“fill_parent”

       android:layout_height=“65px” android:text=“”

       android:textColor=“#fff”

       android:textSize=“40px”

       android:singleLine=“true”/>

    <TableRow android:id=“@+id/widget46” android:layout_width=“fill_parent”

       android:layout_height=“50px” android:orientation=“horizontal”>

       <ImageButton android:id=“@+id/b110” android:layout_width=“79px”

           android:layout_height=“50px” android:background=“@drawable/b110”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b120” android:layout_width=“79px”

           android:layout_height=“50px” android:background=“@drawable/b120”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b100” android:layout_width=“79px”

           android:layout_height=“50px” android:background=“@drawable/b100”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b130” android:layout_width=“73px”

           android:layout_height=“50px” android:background=“@drawable/b130”

           android:layout_margin=“1px” />

    </TableRow>

    <TableRow android:id=“@+id/widget47” android:layout_width=“fill_parent”

       android:layout_height=“80px” android:orientation=“horizontal”>

       <ImageButton android:id=“@+id/b070” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b070”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b080” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b080”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b090” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b090”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b170” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b170”

           android:layout_margin=“1px” />

    </TableRow>

    <TableRow android:id=“@+id/widget47” android:layout_width=“fill_parent”

       android:layout_height=“80px” android:orientation=“horizontal”>

       <ImageButton android:id=“@+id/b040” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b040”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b050” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b050”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b060” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b060”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b160” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b160”

           android:layout_margin=“1px” />

    </TableRow>

    <TableRow android:id=“@+id/widget47” android:layout_width=“fill_parent”

       android:layout_height=“80px” android:orientation=“horizontal”>

       <ImageButton android:id=“@+id/b010” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b010”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b020” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b020”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b030” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b030”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b150” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b150”

           android:layout_margin=“1px” />

    </TableRow>

    <TableRow android:id=“@+id/widget47” android:layout_width=“fill_parent”

       android:layout_height=“80px” android:orientation=“horizontal”>

       <ImageButton android:id=“@+id/b190” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b190”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b000” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b000”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b180” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b180”

           android:layout_margin=“1px” />

       <ImageButton android:id=“@+id/b140” android:layout_width=“wrap_content”

           android:layout_height=“76px” android:background=“@drawable/b140”

           android:layout_margin=“1px” />

    </TableRow>

</TableLayout>

  1. 按钮的事件以及算法的实现

  JsqActivity.java代码如下:

import java.util.ArrayList;

import java.util.StringTokenizer;

import com.yinlans.jsq.R;

import android.app.Activity;

import android.os.Bundle;

import android.view.Gravity;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnTouchListener;

import android.widget.EditText;

import android.widget.ImageButton;

/**

 *实现按钮的事件处理及算法

 * @author Administrator

 *

 */

public class JsqActivity extends Activity {

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        //通过findViewById获取EditText对象

        final EditText text = (EditText) this.findViewById(R.id.text);

        //通过findViewById获得ImageButton

       final ImageButton b000 = (ImageButton) this.findViewById(R.id.b000);

       final ImageButton b010 = (ImageButton) this.findViewById(R.id.b010);

       final ImageButton b020 = (ImageButton) this.findViewById(R.id.b020);

       final ImageButton b030 = (ImageButton) this.findViewById(R.id.b030);

       final ImageButton b040 = (ImageButton) this.findViewById(R.id.b040);

       final ImageButton b050 = (ImageButton) this.findViewById(R.id.b050);

       final ImageButton b060 = (ImageButton) this.findViewById(R.id.b060);

       final ImageButton b070 = (ImageButton) this.findViewById(R.id.b070);

       final ImageButton b080 = (ImageButton) this.findViewById(R.id.b080);

       final ImageButton b090 = (ImageButton) this.findViewById(R.id.b090);

       final ImageButton b110 = (ImageButton) this.findViewById(R.id.b110);

       final ImageButton b100 = (ImageButton) this.findViewById(R.id.b100);

       final ImageButton b120 = (ImageButton) this.findViewById(R.id.b120);

       final ImageButton b130 = (ImageButton) this.findViewById(R.id.b130);

       final ImageButton b140 = (ImageButton) this.findViewById(R.id.b140);

       final ImageButton b150 = (ImageButton) this.findViewById(R.id.b150);

       final ImageButton b160 = (ImageButton) this.findViewById(R.id.b160);

       final ImageButton b170 = (ImageButton) this.findViewById(R.id.b170);

       final ImageButton b180 = (ImageButton) this.findViewById(R.id.b180);

       final ImageButton b190 = (ImageButton) this.findViewById(R.id.b190);

       //对EditText进行设置

       text.setBackgroundColor(0);//设置EditText的颜色

       text.setGravity(Gravity.RIGHT);//设置EditText的光标显示在右边

       //实现图片切换时的效果(两张图片)

       final OnTouchListener listener=new OnTouchListener() {

            @Override

            public boolean onTouch(View v, MotionEvent event) {

               // TODOAuto-generated method stub

            if (event.getAction() == MotionEvent.ACTION_DOWN) {

                     down(v,text);

             } else if (event.getAction() == MotionEvent.ACTION_UP) {

                      up(v,text);

             }

            return false; } };

            //对按钮加监听

            b000.setOnTouchListener(listener);

            b010.setOnTouchListener(listener);

            b020.setOnTouchListener(listener);

            b030.setOnTouchListener(listener);

            b040.setOnTouchListener(listener);

            b050.setOnTouchListener(listener);

            b060.setOnTouchListener(listener);

            b070.setOnTouchListener(listener);

            b080.setOnTouchListener(listener);

            b090.setOnTouchListener(listener);

            b100.setOnTouchListener(listener);

            b110.setOnTouchListener(listener);

            b120.setOnTouchListener(listener);

            b130.setOnTouchListener(listener);

            b140.setOnTouchListener(listener);

            b150.setOnTouchListener(listener);

            b160.setOnTouchListener(listener);

            b170.setOnTouchListener(listener);

            b180.setOnTouchListener(listener);

            b190.setOnTouchListener(listener);

    }

    private void addText(String s,EditText text){

       text.setText(text.getText()+s);

       text.setSelection(text.length());//对于EditText里的内容,光标始终显示在右边

    }

    private void tui(String flag,EditText text){

       //退格的实现

       if(“tui”.equals(flag)){

           String t=text.getText().toString();

           text.setText(t.substring(0, t.length()-1));

           text.setSelection(text.length());

           //清除的实现

       }else if(“clear”.equals(flag)){

           text.setText(“”);

       }

    }

//实现按钮的数字

    private void down(View v,EditText text){

       switch(v.getId()){

        case R.id.b000:{

            v.setBackgroundResource(R.drawable.b001);

            addText(“0”,text);

            break;

        }

        case R.id.b010:{

            v.setBackgroundResource(R.drawable.b011);

            addText(“1”,text);break;

        }

        case R.id.b020:{

            v.setBackgroundResource(R.drawable.b021);

            addText(“2”,text);break;

        }

        case R.id.b030:{

            v.setBackgroundResource(R.drawable.b031);

            addText(“3”,text);break;

        }

        case R.id.b040:{

            v.setBackgroundResource(R.drawable.b041);

            addText(“4”,text);break;

        }

        case R.id.b050:{

            v.setBackgroundResource(R.drawable.b051);

            addText(“5”,text);break;

        }

        case R.id.b060:{

            v.setBackgroundResource(R.drawable.b061);

            addText(“6”,text);break;

        }

        case R.id.b070:{

            v.setBackgroundResource(R.drawable.b071);

            addText(“7”,text);break;

        }

        case R.id.b080:{

            v.setBackgroundResource(R.drawable.b081);

            addText(“8”,text);break;

        }

        case R.id.b090:{

            v.setBackgroundResource(R.drawable.b091);

            addText(“9”,text);break;

        }

        case R.id.b100:{

            v.setBackgroundResource(R.drawable.b101);

            tui(“tui”,text);

            break;

        }

        case R.id.b110:{

            v.setBackgroundResource(R.drawable.b111);

            addText(“(“,text);break;

        }

        case R.id.b120:{

            v.setBackgroundResource(R.drawable.b121);

            addText(“)”,text);break;

        }

        case R.id.b130:{

            v.setBackgroundResource(R.drawable.b131);

            tui(“clear”,text);

            break;

        }

        case R.id.b140:{

            v.setBackgroundResource(R.drawable.b141);

            addText(“+”,text);break;

        }

        case R.id.b150:{

            v.setBackgroundResource(R.drawable.b151);

            addText(“-“,text);break;

        }

        case R.id.b160:{

            v.setBackgroundResource(R.drawable.b161);

            addText(“×”,text);break;

        }

        case R.id.b170:{

            v.setBackgroundResource(R.drawable.b071);

            addText(“÷”,text);break;

        }

        case R.id.b180:{

            v.setBackgroundResource(R.drawable.b181);

            text.setText(getKuo(text.getText()+””)+””);

            text.setSelection(text.getText().length());

            break;

        }

        case R.id.b190:{

            v.setBackgroundResource(R.drawable.b191);

            addText(“.”,text);break;

        }

       }

    }

    private void up(View v,EditText text){

       switch(v.getId()){

        case R.id.b000:{

            v.setBackgroundResource(R.drawable.b000);break;

        }

        case R.id.b010:{

            v.setBackgroundResource(R.drawable.b010);break;

        }

        case R.id.b020:{

            v.setBackgroundResource(R.drawable.b020);break;

        }

        case R.id.b030:{

            v.setBackgroundResource(R.drawable.b030);break;

        }

        case R.id.b040:{

            v.setBackgroundResource(R.drawable.b040);break;

        }

        case R.id.b050:{

            v.setBackgroundResource(R.drawable.b050);break;

        }

        case R.id.b060:{

            v.setBackgroundResource(R.drawable.b060);break;

        }

        case R.id.b070:{

            v.setBackgroundResource(R.drawable.b070);break;

        }

        case R.id.b080:{

            v.setBackgroundResource(R.drawable.b080);break;

        }

        case R.id.b090:{

            v.setBackgroundResource(R.drawable.b090);break;

        }

        case R.id.b100:{

            v.setBackgroundResource(R.drawable.b100);break;

        }

        case R.id.b110:{

            v.setBackgroundResource(R.drawable.b110);break;

        }

        case R.id.b120:{

            v.setBackgroundResource(R.drawable.b120);break;

        }

        case R.id.b130:{

            v.setBackgroundResource(R.drawable.b130);break;

        }

        case R.id.b140:{

            v.setBackgroundResource(R.drawable.b140);break;

        }

        case R.id.b150:{

            v.setBackgroundResource(R.drawable.b150);break;

        }

        case R.id.b160:{

            v.setBackgroundResource(R.drawable.b160);break;

        }

        case R.id.b170:{

            v.setBackgroundResource(R.drawable.b170);break;

        }

        case R.id.b180:{

            v.setBackgroundResource(R.drawable.b180);break;

        }

        case R.id.b190:{

            v.setBackgroundResource(R.drawable.b190);break;

       }

    }

    }

    //运算(两种情况)

    //有()的运算

    public double getKuo(String s){

       if (s.lastIndexOf(‘(‘) == -1) {

           return getValue(s);

       } else {

           int left = s.lastIndexOf(‘(‘);

           int right = -1;

           for (int i = left; i < s.length();i++) {

              if (s.charAt(i) == ‘)’) {

                  right = i;

                  break;

              }

           }

           String sr = s.substring(left + 1,right);

           String st = getValue(sr) + “”;

           String s1 = s.substring(0, left);

           String s2 = s.substring(right + 1);

           return getKuo(s1 + st + s2);

       }

    }

    //单纯的数字加减乘除

public double getValue(String res){

        for (int i = 0; i < res.length(); i++) {

            if (res.charAt(i) == ‘-‘) {

               if (i == 0)

                   res = “@” +  res.substring(1);

               else {

                   char c = res.charAt(i – 1);

                   switch (c) {

                      case ‘+’:

                     case ‘-‘:

                     case ‘×’:

                     case ‘÷’:

                     case ‘(‘:  res = res.substring(0, i) + “@” + res.substring(i + 1);

                   }

               }

            }

        }

        StringTokenizer st = new StringTokenizer(res,”+-÷×”);

        ArrayList<Double> datas = new ArrayList<Double>();

        while (st.hasMoreTokens()) {

            String num = st.nextToken();

            System.out.println(num);

            if (num.charAt(0) == ‘@’)

               datas.add(Double.parseDouble(“-” + num.substring(1)));

            else

               datas.add(Double.parseDouble(num));

        }

        StringTokenizer st2 = new StringTokenizer(res,”0123456789.@”);

        ArrayList<String> fus = new ArrayList<String>();

        while (st2.hasMoreTokens()) {

            fus.add(st2.nextToken());

        }

        for (int i = 0; i < fus.size();i++) {

           String fu = fus.get(i);

           if (fu.equals(“×”) || fu.equals(“÷”)) {

              fus.remove(i);

              double d1 = datas.remove(i);

              double d2 = datas.remove(i);

              double d = 0;

              if (fu.equals(“×”)) {

                  d = d1 * d2;

              } else {

                  d = d1 / d2;

              }

              datas.add(i, d);

              i–;

           }

       }

       while (!fus.isEmpty()) {

           String fu = fus.remove(0);

           double d1 = datas.remove(0);

           double d2 = datas.remove(0);

           double d = 0;

           if (fu.equals(“+”)) {

              d = d1 + d2;

           } else {

              d = d1 – d2;

           }

           datas.add(0, d);

       }

       return datas.get(0);

    }

}

这样,一个Android版的计算器就Ok了!

按钮这里是提取的方法:由于有多个按钮我们可以把相同的代码写成一个方法提取出来,然后进行调用。当然我们也可以用下面的方法,对每个按钮都这样写。

实现ImageButton事件监听

         b000.setOnTouchListener(new OnTouchListener() {

        @Override

        public boolean onTouch(View v, MotionEvent event) {

            // TODOAuto-generated method stub

        if (event.getAction() == MotionEvent.ACTION_DOWN) {

                       v.setBackgroundResource(R.drawable.b001);

                       text.setText(text.getText()+”0″);

                       text.setSelection(text.length());

         } else if (event.getAction() == MotionEvent.ACTION_UP) {

         v.setBackgroundResource(R.drawable.b000);

         }

        return false; } });

 

No Responses To This Post So Far(Rss)

Post a comment