zoukankan      html  css  js  c++  java
  • android的计算器

    今天我闲着无聊,便想仿照Iphone的计算器自己写一个出来玩玩,于是就开动脑经,来场头脑风暴了!我拿什么了写呢?wp?这是个不错的选择,但是我最近在研究安卓的开发(求各位MSP不要烧我,我买不起MAC,你们要搞应该找昌豪,他有MAC,先烧死他再来烧我~~~)搞安卓开发其实还是蛮简单的!不就是监听,然后实现功能吗?跟WP的开发过程有点像  <Button  click = "clickaction">  在后台process中会自动生成触发函数 这是wp的开发过程,而安卓呢?在xml中定义<Button  android:id = "@+idutton">  然后在主函数里面写一个监听类,注意class ButtonListener implements OnClickListener 继承监听类,然后new一个 找到button的id 就可以设置它的监听了!好了废话不多说,让我们直接看安卓的界面吧!

    image

    有木有很像iphone的计算器啊?哈哈   不过我发现最后一行的权重在不同的手机上分配的不一样吧,这是我比较郁闷的地方,不知道有没有大牛能够帮小弟解决呢?

    首先先上我们的xml代码

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity" >
    
        <LinearLayout
            android:id="@+id/linear"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="5dp" >
    
            <TextView
                android:id="@+id/textView"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:gravity="right"
                android:hint="@string/insert"
                 android:maxLength="26"
                android:textSize="40sp" />
        </LinearLayout>
    
        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/linear" >
    
            <TableRow
                android:layout_weight="1"
                android:paddingLeft="5dp"
                android:paddingRight="5dp" >
    
                <Button
                    android:id="@+id/clear"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/clear" />
    
                <Button
                    android:id="@+id/as"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/as" />
    
                <Button
                    android:id="@+id/mod"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/mod" />
    
                <Button
                    android:id="@+id/exc"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/exc" />
            </TableRow>
    
            <TableRow
                android:layout_weight="1"
                android:paddingLeft="5dp"
                android:paddingRight="5dp" >
    
                <Button
                    android:id="@+id/button7"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num7" />
    
                <Button
                    android:id="@+id/button8"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num8" />
    
                <Button
                    android:id="@+id/button9"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num9" />
    
                <Button
                    android:id="@+id/rid"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/rid" />
            </TableRow>
    
            <TableRow
                android:layout_weight="1"
                android:paddingLeft="5dp"
                android:paddingRight="5dp" >
    
                <Button
                    android:id="@+id/button4"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num4" />
    
                <Button
                    android:id="@+id/button5"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num5" />
    
                <Button
                    android:id="@+id/button6"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num6" />
    
                <Button
                    android:id="@+id/sub"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/sub" />
            </TableRow>
    
            <TableRow
                android:layout_weight="1"
                android:paddingLeft="5dp"
                android:paddingRight="5dp" >
    
                <Button
                    android:id="@+id/button1"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num1" />
    
                <Button
                    android:id="@+id/button2"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num2" />
    
                <Button
                    android:id="@+id/button3"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/num3" />
    
                <Button
                    android:id="@+id/add"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/add" />
            </TableRow>
    
            <TableRow
                android:layout_weight="1"
                android:paddingLeft="5dp"
                android:paddingRight="5dp" >
    
                <Button
                    android:id="@+id/button0"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="2"
                    android:background="@drawable/rectangle"
                    android:text="@string/num0" />
                  <Button
                    android:id="@+id/rad"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/rad" />
                  <Button
                    android:id="@+id/result"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:background="@drawable/rectangle"
                    android:text="@string/result" />
            </TableRow>
        </TableLayout>
    
    </RelativeLayout>

    在这里我使用的一个线性布局给我得textview框定了一个100dp的范围,然后使用表格布局把控件放进去。

    下面是string.xml 主要存放的一些字符串的资源

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <string name="app_name">T0913_mycal</string>
        <string name="action_settings">Settings</string>
        <string name="hello_world">Hello world!</string>
        <string name="insert">0</string>
            <string name="num0">0</string>
              <string name="num1">1</string>
              <string name="num2">2</string>
                <string name="num3">3</string>
         <string name="num4">4</string>
         <string name="num5">5</string>
         <string name="num6">6</string>
         <string name="num7">7</string>
         <string name="num8">8</string>
         <string name="num9">9</string>
         <string name="exc">/</string>
             <string name="rid">*</string>
                  <string name="sub">-</string>
                  <string name="add">+</string>
                        <string name="result">=</string>
                              <string name="clear">C</string>
                               <string name="rad">.</string>
                                <string name="as">+/-</string>
                                        <string name="mod">%</string>
              
    
    </resources>

    在这里我把所有的内容全部做了链接,这也是一种软件工程的思考,希望大家多多使用这种方式。

    然后大家看到我得控件都是圆角而且带边框的 这是在drawable中获取的效果!

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
         <solid android:color="#ff9d77"/>
        <padding android:left="7dp" android:top="7dp" android:right="7dp"
            android:bottom="7dp" />
      <stroke
                    android:width="2dp"
                    android:color="#dcdcdc" />
        <corners android:radius="8dp" />
    </shape>

    让每个控件的背景都是有这个xml就可以了

    下面就是这个程序的实现代码了!

    package com.example.t0913_mycal;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    private Button []num =new Button[10]; 
    private Button rid,add,sub,result,exc,clear,as,mod,rad;
    private TextView str ;
    private int option = 0;//运算符状态
    private boolean newdigital=true;//标记是否是新输入的数字
    private double firstNum=0,secondNum=0;//两个相加的数
    private double c;//表示取正负
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            rad =(Button)findViewById(R.id.rad);
            str = (TextView)findViewById(R.id.textView);
            rid =(Button)findViewById(R.id.rid);
            add = (Button)findViewById(R.id.add);
            sub = (Button)findViewById(R.id.sub);
            result = (Button)findViewById(R.id.result);
            exc = (Button)findViewById(R.id.exc);
            clear = (Button)findViewById(R.id.clear);
            as = (Button)findViewById(R.id.as);
            mod = (Button)findViewById(R.id.mod);
            num[0] = (Button)findViewById(R.id.button0);
            num[1] = (Button)findViewById(R.id.button1);
            num[2] = (Button)findViewById(R.id.button2);
            num[3] = (Button)findViewById(R.id.button3);
            num[4] = (Button)findViewById(R.id.button4);
            num[5] = (Button)findViewById(R.id.button5);
            num[6] = (Button)findViewById(R.id.button6);
            num[7] = (Button)findViewById(R.id.button7);
            num[8] = (Button)findViewById(R.id.button8);
            num[9] = (Button)findViewById(R.id.button9);
            ButtonListener listener = new ButtonListener();
            rad.setOnClickListener(listener);
            str.setOnClickListener(listener);
            rid.setOnClickListener(listener);
            add.setOnClickListener(listener);
            sub.setOnClickListener(listener);
            result.setOnClickListener(listener);
            exc.setOnClickListener(listener);
            clear.setOnClickListener(listener);
            as.setOnClickListener(listener);
            mod.setOnClickListener(listener);
            num[0].setOnClickListener(listener);
            num[1].setOnClickListener(listener);
            num[2].setOnClickListener(listener);
            num[3].setOnClickListener(listener);
            num[4].setOnClickListener(listener);
            num[5].setOnClickListener(listener);
            num[6].setOnClickListener(listener);
            num[7].setOnClickListener(listener);
            num[8].setOnClickListener(listener);
            num[9].setOnClickListener(listener);
        }
    class ButtonListener implements OnClickListener{
    
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Button btu = (Button)v;
            String s = str.getText().toString();//获取文本框显示的字符串
            String t = (String)btu.getText().toString();
            if(btu.getId() == R.id.button0 || btu.getId() == R.id.button1 || btu.getId() == R.id.button2
                    ||btu.getId() == R.id.button3 || btu.getId() == R.id.button4 || btu.getId() == R.id.button5
                    || btu.getId() == R.id.button6 ||btu.getId() == R.id.button7||btu.getId() == R.id.button8
                    || btu.getId() == R.id.button9 ){
                if(newdigital){
                    str.setText("");
                    str.setText(t);
                    newdigital = false;
                }
                else{
                    str.setText(s+t);
                    newdigital = false;
                }return;                     
            }
            if(btu.getId()==R.id.as)//改变数的正负性
            {
                if(s.length() == 0){
                    firstNum = 0;
                    secondNum = 0;
                    newdigital = true;
                    option = 0;
                    return ;
                }
                else if (s !=""){
                    c=Double.parseDouble(s);
                    str.setText(String.valueOf(-c));
                    return;
                }
            }
            if(btu.getId() == R.id.add){
                firstNum = Double.parseDouble(s);
                option=1;
                newdigital = true;
                return;
            }
            if(btu.getId() == R.id.sub){
                firstNum = Double.parseDouble(s);
                option = 2;
                newdigital = true;
                return;
            }
            if(btu.getId() == R.id.rid){
                firstNum = Double.parseDouble(s);
                option = 3;
                newdigital = true;
                return;
            }
            if(btu.getId() == R.id.exc){
                firstNum = Double.parseDouble(s);
                option = 4;
                newdigital = true;
                return;
            }
            if(btu.getId() == R.id.mod){
                firstNum = Double.parseDouble(s);
                option = 5;
                newdigital = true;
                return;
            }
            if(btu.getId() == R.id.clear){
                firstNum = 0;
                secondNum = 0;
                newdigital = true;
                option = 0;
                str.setText("");
                return;
            }
            if(btu.getId() == R.id.rad){
                    if(s.length() == 0)
                    {
                        str.setText("0.");
                        newdigital=false;
                    }
                    else if(s.indexOf(".") == -1)
                    {
                         str.setText(s+".");    
                    }
                return;
            }
            if(btu.getId() == R.id.result){
                secondNum=Double.parseDouble(s);
                switch(option)
                {
                case 1:
                    str.setText(String.valueOf(firstNum+secondNum));break;
                case 2:
                    str.setText(String.valueOf(firstNum-secondNum));break;
                case 3:
                    str.setText(String.valueOf(firstNum*secondNum));break;
                case 4:
                {
                    if(secondNum!=0){
                            str.setText(String.valueOf(firstNum/secondNum));}
                    else
                        {
                        Toast.makeText(MainActivity.this, "除数不能为0!", Toast.LENGTH_SHORT).show();
                        str.setText("");
                        firstNum=0;
                        secondNum=0;
                        option=0;
                        newdigital=true;
                        return;
                        }
                    break;
                }
                case 5:
                    str.setText(String.valueOf(firstNum%secondNum));
                    break;
                }            
                return;
            }
        }
        
    }
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }

      大功告成了,我的计算器其实非常之简单!望各位多多指教!

  • 相关阅读:
    IDEA启动tomcat时提示:...init The APR based Apache Tomcat Native library failed to load. The error reported was ...tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    Mysql中(增加、删除字段,修改字段名、字段类型、注释,调整字段顺序等)常用操作
    MySql、Mariadb创建数据库、用户及授权
    三款大前端UI框架
    TubeMQ
    Delphi 修改系统时间格式为:'yyyy-MM-dd HH:mm:ss', 'yyyy''年''M''月 ''d''日'''
    QString与LPCWSTR 带中文的相互转换
    Windows 下搭建 Apache Http Server 文件系统(详细)
    Django day32 跨域问题,创建vue项目,axios的使用
    Django day31 contentType组件,Django的缓存
  • 原文地址:https://www.cnblogs.com/samuelwnb/p/3973440.html
Copyright © 2011-2022 走看看