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> 
原文地址:https://www.cnblogs.com/wzsblogs/p/4185800.html