zoukankan      html  css  js  c++  java
  • 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> 
  • 相关阅读:
    FlowPortal:流程节点定义有误,合流节点"合流"没有对应的聚焦节点
    FlowPortal 6.00c 使用xFormDesigner复制粘贴中文总是乱码
    SharePoint 2019 里安装FlowPortal6.00c报错
    与用户xxx一起提供的密码不正确。请确认输入的密码正确并重试
    SharePoint 2010 安装错误:请重新启动计算机,然后运行安装程序以继续
    SharePoint 2013: Workflow Manager Backend 服务意外地终止
    用户管理
    Linux及工具网站
    基于c开发的全命令行音频播放器
    Linux 下清空或删除大文件内容的 5 种方法
  • 原文地址:https://www.cnblogs.com/wzsblogs/p/4185800.html
Copyright © 2011-2022 走看看