首页 > 代码库 > android开发-安卓计算器

android开发-安卓计算器

第一次弄安卓开发,有点坎坷,不过还好,经过两天的努力还是能完成。

首先在res/layout的文件夹下配置activity_main.xml文件

这是一个安卓页面文件,有关界面的控件都是在这里定义,例如在里面写一段内容:

    <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/opLEFT" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="(" android:layout_weight="1" />             <Button android:id="@+id/opRIGHT" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text=")" android:layout_weight="1" />             <Button android:id="@+id/opDEL" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="DEL" android:layout_weight="1" />             <Button android:id="@+id/opCLS" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="CLS" android:layout_weight="1" />         </LinearLayout>     </TableRow>

上面的 <TableRow></TableRow>是一行,和网页标签<tr></tr>类似

在<LineraLayout>标签是在这行里加入一个线性布局,里面有一些对该布局属性的定义。

<Button>标签是添加一个按钮,id=@+id/opLEFT给该按钮定义一个名字,方便在后台对其的调用,text="("是其显示的内容,即该按钮是一个左括号按键。

以下各个按钮类似,这里不再赘述。

至此运行文件就可以在界面上显示一组按钮了,虽然什么功能都没有,下面将介绍如何在后台添加功能。

以左括号按钮为例

在MainActivity.java 的onCreate()函数里

我们定义一个Button 如Button btn=new Button()

然后指定其对应于界面上的按钮,btn=(Button)findViewById(R.id.opLEFT);

注意opLEFT是我们在XML文件中定义的名称,在此可以用上。

至此我们就可以通过操作btn来控制左括号实行的功能了。

既然要实现功能,就必须得对其添加一个事件监听器

我们自己实现一个监听函数:

 

    private class clickNumListener implements Button.OnClickListener{        @Override        public void onClick(View view)        {            Button btn = (Button)view;             String input = btn.getText().toString();            resultText.append(input);        }    }

然后给其加上监听器:btn.setOnClickListener(new clickNumListener());

实现的功能是给resultText的内容添加上‘(‘,resultText是一个文本框,其定义方式和btn类似.
到此,基本显示到点击触发功能已经实现,剩下的内容就是如何实现了,这里不进行详细说明,给代码大家自己琢磨

MainActivity.java

package example.mypro;import java.util.Stack;import android.R.string;import android.support.v7.app.ActionBarActivity;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends ActionBarActivity {    private Button[] btnNum = new Button[15];    private Button[] btnOp = new Button[11];    private EditText resultText=null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        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.opLEFT);         btnNum[11] = (Button) findViewById(R.id.opRIGHT);         btnNum[12] = (Button) findViewById(R.id.opPOI);        btnOp[1]=(Button) findViewById(R.id.opADD);        btnOp[2]=(Button) findViewById(R.id.opSUB);        btnOp[3]=(Button) findViewById(R.id.opDIV);        btnOp[4]=(Button) findViewById(R.id.opMUL);        btnOp[5]=(Button) findViewById(R.id.opEQU);        btnOp[6]=(Button) findViewById(R.id.opDEL);        btnOp[7]=(Button) findViewById(R.id.opCLS);        resultText=(EditText) findViewById(R.id.result);        for(int i=0;i<=12;i++)            btnNum[i].setOnClickListener(new clickNumListener());        for(int i=1;i<=4;i++)            btnOp[i].setOnClickListener(new clickNumListener());        btnOp[5].setOnClickListener(new clickOpListener());        btnOp[6].setOnClickListener(new clickOpListener());        btnOp[7].setOnClickListener(new clickOpListener());            }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        // Inflate the menu; this adds items to the action bar if it is present.        MenuInflater inflater = getMenuInflater();          inflater.inflate(R.menu.main, menu);        return true;    }    private class clickNumListener implements Button.OnClickListener{        @Override        public void onClick(View view)        {            Button btn = (Button)view;             String input = btn.getText().toString();            resultText.append(input);        }    }    private class clickOpListener implements Button.OnClickListener{        @Override        public void onClick(View view)        {            Button btn = (Button)view;             String input = btn.getText().toString();            if(input.equals("="))            {                calculate();            }            else if(input.equals("DEL"))            {                if(resultText.getText().length()>0)                    resultText.setText(resultText.getText().subSequence(0, resultText.getText().length()-1));            }            else if(input.equals("CLS"))            {                resultText.setText("");            }        }    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        // Handle action bar item clicks here. The action bar will        // automatically handle clicks on the Home/Up button, so long        // as you specify a parent activity in AndroidManifest.xml.        switch(item.getItemId())        {        case R.id.mi1:            break;        case R.id.mi2:            break;        case R.id.mi3:            break;        case R.id.mi4:            break;        }        return true ;    }    public void calculate()    {        char[] str=new char[100];        resultText.append("#");        Stack<String> s=new Stack<String>();        Stack<String> s2=new Stack<String>();        s.push("#");        int len1=0;        int count=999;        boolean flag=true;        for(int i=0;i<resultText.getText().length();i++)        {            try            {                if((resultText.getText().charAt(i)<=‘9‘&&resultText.getText().charAt(i)>=‘0‘)||resultText.getText().charAt(i)==‘.‘)                {                    count=0;                    str[len1++]=resultText.getText().charAt(i);                }                else if(resultText.getText().charAt(i)!=‘)‘&&resultText.getText().charAt(i)!=‘#‘)                {                    count++;                    if(count==1)                    {                        s2.push(String.valueOf(str));                        len1=0;                        str=new char[100];                    }                    if(s.size()==1||resultText.getText().charAt(i)==‘(‘||s.peek().charAt(0)==‘(‘)                        s.push(String.valueOf(resultText.getText().charAt(i)));                    else if(resultText.getText().charAt(i)==‘x‘||resultText.getText().charAt(i)==‘/‘)                    {                        if(s.peek().charAt(0)==‘x‘||s.peek().charAt(0)==‘/‘)                        {                            char c=s.pop().charAt(0);                            String num1=s2.pop();                            String num2=s2.pop();                            double num3;                            if(c==‘x‘)                            {                                num3=Double.parseDouble(num1)*Double.parseDouble(num2);                                s2.push(String.valueOf(num3));                            }                            else                            {                                num3=Double.parseDouble(num2)/Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                            s.push(String.valueOf(resultText.getText().charAt(i)));                        }                        else                        {                            s.push(String.valueOf(resultText.getText().charAt(i)));                        }                    }                    else if(resultText.getText().charAt(i)==‘+‘||resultText.getText().charAt(i)==‘-‘)                    {                        char c=s.pop().charAt(0);                        String num1=s2.pop();                        String num2=s2.pop();                        double num3;                        if(c==‘x‘)                        {                            num3=Double.parseDouble(num1)*Double.parseDouble(num2);                            s2.push(String.valueOf(num3));                        }                        else if(c==‘+‘)                        {                            num3=Double.parseDouble(num2)+Double.parseDouble(num1);                            s2.push(String.valueOf(num3));                        }                        else if(c==‘-‘)                        {                            num3=Double.parseDouble(num2)-Double.parseDouble(num1);                            s2.push(String.valueOf(num3));                        }                        else                         {                            num3=Double.parseDouble(num2)/Double.parseDouble(num1);                            s2.push(String.valueOf(num3));                        }                        s.push(String.valueOf(resultText.getText().charAt(i)));                    }                }                else                 {                    count++;                    if(count==1)                    {                        s2.push(String.valueOf(str));                        len1=0;                        str=new char[100];                    }                    if(resultText.getText().charAt(i)==‘)‘)                    {                        while(true)                        {                            char c=s.pop().charAt(0);                            if(c==‘(‘)                                break;                            String num1=s2.pop();                            String num2=s2.pop();                            double num3;                            if(c==‘+‘)                            {                                num3=Double.parseDouble(num2)+Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                            else if(c==‘-‘)                            {                                num3=Double.parseDouble(num2)-Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                            else if(c==‘x‘)                            {                                num3=Double.parseDouble(num2)*Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                            else if(c==‘/‘)                            {                                num3=Double.parseDouble(num2)/Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                        }                    }                    else                    {                        while(true)                        {                            char c=s.pop().charAt(0);                            if(c==‘#‘)                                break;                            String num1=s2.pop();                            String num2=s2.pop();                            double num3;                            if(c==‘+‘)                            {                                num3=Double.parseDouble(num2)+Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                            else if(c==‘-‘)                            {                                num3=Double.parseDouble(num2)-Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                            else if(c==‘x‘)                            {                                num3=Double.parseDouble(num2)*Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                            else if(c==‘/‘)                            {                                num3=Double.parseDouble(num2)/Double.parseDouble(num1);                                s2.push(String.valueOf(num3));                            }                        }                    }                }            }            catch(Exception e)            {                flag=false;                resultText.setText("Error");                break;            }        }        if(flag)            resultText.setText(s2.pop());    }}

 

activity_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="30sp" 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/opLEFT" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="(" android:layout_weight="1" />             <Button android:id="@+id/opRIGHT" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text=")" android:layout_weight="1" />             <Button android:id="@+id/opDEL" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="DEL" android:layout_weight="1" />             <Button android:id="@+id/opCLS" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="CLS" 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/num7" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="7" android:layout_weight="1" />             <Button android:id="@+id/num8" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="8" android:layout_weight="1" />             <Button android:id="@+id/num9" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="9" android:layout_weight="1" />             <Button android:id="@+id/opDIV" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 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="30sp"                 android:text="4" android:layout_weight="1" />             <Button android:id="@+id/num5" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="5" android:layout_weight="1" />             <Button android:id="@+id/num6" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="6" android:layout_weight="1" />             <Button android:id="@+id/opMUL" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="x" 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="30sp"                 android:text="1" android:layout_weight="1" />             <Button android:id="@+id/num2" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="2" android:layout_weight="1" />             <Button android:id="@+id/num3" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="3" android:layout_weight="1" />             <Button android:id="@+id/opSUB" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 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="30sp" android:layout_weight="1">             <Button android:id="@+id/opPOI" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="." android:layout_weight="1" />             <Button android:id="@+id/num0" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="0" android:layout_weight="1" />             <Button android:id="@+id/opEQU" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="=" android:layout_weight="1" />             <Button android:id="@+id/opADD" android:layout_width="fill_parent"                 android:layout_height="wrap_content" android:textSize="30sp"                 android:text="+" android:layout_weight="1" />         </LinearLayout>     </TableRow>    <TableRow>         <TextView android:id="@+id/show" android:layout_width="fill_parent"                  android:text="本软件由韦忠汕,刘星星,王建雄联合打造" android:layout_height="wrap_content" android:gravity="center"/>    </TableRow>    </TableLayout> 

 

android开发-安卓计算器