Android简单计算器

来源:互联网 发布:阿里云bgp服务器 编辑:程序博客网 时间:2024/05/22 08:10

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:tools="http://schemas.android.com/tools"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:layout_marginTop="40dp"      android:columnCount="5"      android:rowCount="6"      tools:context=".MainActivity" >        <EditText          android:id="@+id/print"          android:layout_width="match_parent"          android:layout_height="wrap_content"          android:layout_columnSpan="5"          android:textSize="60sp"        android:singleLine="true"        android:layout_marginLeft="2dp"          android:layout_marginRight="2dp"          android:layout_row="0"         android:textColor="#555"        android:background="@drawable/textview_border" />      <Button          android:id="@+id/back"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="0"          android:layout_columnSpan="3"          android:layout_gravity="fill_horizontal"          android:layout_row="1"          android:text="@string/back" />        <Button          android:id="@+id/clear"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="3"          android:layout_columnSpan="2"          android:layout_row="1"          android:layout_gravity="fill_horizontal"          android:text="@string/clear" />        <Button          android:id="@+id/txt7"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="0"          android:layout_row="2"          android:text="7" />        <Button          android:id="@+id/txt8"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="1"          android:layout_row="2"          android:text="8" />        <Button          android:id="@+id/txt9"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="2"          android:layout_row="2"          android:text="9" />        <Button          android:id="@+id/txtdivide"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="3"          android:layout_row="2"          android:text="÷" />          <Button          android:id="@+id/txt4"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="0"          android:layout_row="3"          android:text="4" />        <Button          android:id="@+id/txt5"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="1"          android:layout_row="3"          android:text="5" />        <Button          android:id="@+id/txt6"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="2"          android:layout_row="3"          android:text="6" />        <Button          android:id="@+id/txtx"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="3"          android:layout_row="3"          android:text="x" />        <Button          android:id="@+id/txt1"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="0"          android:layout_row="4"          android:text="1" />        <Button          android:id="@+id/txt2"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="1"          android:layout_row="4"          android:text="2" />        <Button          android:id="@+id/txt3"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="2"          android:layout_row="4"          android:text="3" />        <Button          android:id="@+id/txtmin"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="3"          android:layout_row="4"          android:text="—" />              <Button          android:id="@+id/txtcount"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="4"          android:layout_gravity="fill_vertical"          android:layout_row="2"          android:layout_rowSpan="2"          android:text="@string/count"/>        <Button          android:id="@+id/txteq"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="4"          android:layout_gravity="fill_vertical"          android:layout_row="4"          android:layout_rowSpan="2"          android:text="=" />        <Button          android:id="@+id/txt0"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="0"          android:layout_columnSpan="2"          android:layout_gravity="fill_horizontal"          android:layout_row="5"          android:text="0" />        <Button          android:id="@+id/txtspl"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="2"          android:layout_row="5"          android:text="." />        <Button          android:id="@+id/txttakesum"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_column="3"          android:layout_row="5"          android:text="+" />    </GridLayout>

ps:简单计算器该有的功能都有,就是输入的数字不能太长,不然会看不见

      计算器逻辑真心好复杂

后台代码:

package com.kechong.android.pay;import org.json.JSONException;import org.json.JSONObject;import android.annotation.SuppressLint;import android.app.Activity;import android.app.AlertDialog;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import com.sctcd.sctcdpay_lib.SctcdInterface;import com.sctcdpay.nfc.util.SctcdId;public class MainActivity extends Activity {private TextView print;private boolean flag=false;//用以标记是否做过等于运算    private int[] arr0,arr1,arr2;      private Button[] btnSings,btnOptors,btnNums;private static String value="0"; //用来存储所有按键值private java.text.DecimalFormat format = new java.text.DecimalFormat("0.00");    @SuppressLint("HandlerLeak")Handler handler = new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case SctcdId.SCTSD_SDK_RETURN:String subject = null;try {if((msg.obj.toString()).contains("操作中途取消")){subject = msg.obj.toString();}else if((msg.obj.toString()).contains("操作超时")){subject = msg.obj.toString();}else{JSONObject jsonObject = new JSONObject(msg.obj.toString());subject=jsonObject.getString("subject");}} catch (JSONException e) {e.printStackTrace();subject = msg.obj.toString();}overConsume(subject);break;default:break;}};};  @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main_start);         init();}private void init(){//操作符号+-x÷arr0 = new int[] { R.id.txtdivide, R.id.txtx, R.id.txtmin,R.id.txttakesum};btnSings = new Button[arr0.length];//处理按钮清空,回退,等于,消费arr1=new int[]{R.id.clear,R.id.back,R.id.txteq,R.id.txtcount};btnOptors=new Button[arr1.length];//数字按钮0-9和.arr2 = new int[]{ R.id.txt0, R.id.txt1, R.id.txt2, R.id.txt3, R.id.txt4, R.id.txt5, R.id.txt6, R.id.txt7, R.id.txt8, R.id.txt9,R.id.txtspl };btnNums = new Button[arr2.length];print = (EditText) findViewById(R.id.print);          print.setText("0");          print.setEnabled(false);                 Sign sign=new Sign();        Number number = new Number();          Operator operator = new Operator();        for (int i = 0; i < arr0.length; i++) {          btnSings[i] = (Button) findViewById(arr0[i]);          btnSings[i].setOnClickListener(sign);         }           for (int i = 0; i < arr1.length; i++) {          btnOptors[i] = (Button) findViewById(arr1[i]);          btnOptors[i].setOnClickListener(operator);         }           for (int i = 0; i < arr2.length; i++) {          btnNums[i] = (Button) findViewById(arr2[i]);          btnNums[i].setOnClickListener(number);         }  } private String cardBalanceInquiries(){    JSONObject subjectJson = new JSONObject();    JSONObject orderJson = new JSONObject();    try {    subjectJson.put("timeOut", "30");} catch (JSONException e) {e.printStackTrace();}    try {orderJson.put("subject", subjectJson.toString());orderJson.put("sign", "");//没有签名,填写} catch (JSONException e) {e.printStackTrace();}    return orderJson.toString();    }protected void consume(String num){String request =cardBalanceInquiries();    try {    new SctcdInterface().sPay(request, SctcdId.SCTSD_TYPE_CBI,  handler, this);} catch (Exception e) {finish();}}private void overConsume(String subject){String orderAmt=print.getText().toString();print.setText("0");JSONObject jsonObject;String title,msg;try {jsonObject = new JSONObject(subject);String result=jsonObject.getString("orderResult"),cardBalance=jsonObject.getString("cardBalance"),cardNum=jsonObject.getString("cardNum"),orderError=jsonObject.getString("orderError");title=result.equals("00")?"卡【"+cardNum+"】消费成功":"卡【"+cardNum+"】消费失败";double beforeBalance=Double.parseDouble(cardBalance)-Double.parseDouble(orderAmt);if(beforeBalance<0d){title="卡【"+cardNum+"】消费失败";msg="卡余额不足,消费失败\n卡余额:¥"+format.format(Double.parseDouble(cardBalance));}else{msg=result.equals("00")?"消费前卡余额:¥"+format.format(Double.parseDouble(cardBalance))+"\n消费金额:¥"+format.format(Double.parseDouble(orderAmt))+"\n消费后卡余额:¥"+format.format(beforeBalance):orderError;}} catch (JSONException e) {title="发生异常";msg="异常信息:"+e.getMessage();}new AlertDialog.Builder(this).setTitle(title).setMessage(msg).setPositiveButton("确定", null).show();  } private String[] splitToArr(){String[] arr=new String[]{"","",""};int index=0;if(value.contains("+")){index=value.indexOf("+");arr[0]=value.substring(0,index);arr[1]="+";arr[2]=value.substring(index+1);}else if(value.contains("—")){index=value.indexOf("—");arr[0]=value.substring(0,index);arr[1]="—";arr[2]=value.substring(index+1);}else if(value.contains("x")){index=value.indexOf("x");arr[0]=value.substring(0,index);arr[1]="x";arr[2]=value.substring(index+1);}else if(value.contains("÷")){index=value.indexOf("÷");arr[0]=value.substring(0,index);arr[1]="÷";arr[2]=value.substring(index+1);}else{arr[0]=value;}return arr;}private String count(){flag=true;String[] arr=splitToArr();if(arr[1].equals("")){if(value.indexOf(".")==value.length()-1){value=value.replace(".", "");}return value;}if(!arr[1].equals("")&&arr[2].equals("")){arr[2]="0";}if(arr[0].indexOf(".")==arr[0].length()){arr[0]=arr[0]+"0";}if(arr[2].indexOf(".")==arr[2].length()){arr[2]=arr[2]+"0";}double d=0d,d1=Double.parseDouble(arr[0]),d2=Double.parseDouble(arr[2]);if(arr[1].contains("+")){d=d1+d2;}else if(arr[1].contains("—")){d=d1-d2;}else if(arr[1].contains("x")){d=d1*d2;}else if(arr[1].contains("÷")){d=d1/d2;}return format.format(d);}private void setValue(String val){val=val.replace(".00", "");value=val;print.setText(value);} // 加减乘除    class Sign implements OnClickListener {          @Override          public void onClick(View v) {          flag=false;    Button btn=(Button)v;    String[] arr=splitToArr();    String btnVal=btn.getText().toString();    if((!arr[0].equals("")&&arr[0].indexOf(".")==arr[0].length()-1)||(!arr[2].equals("")&&arr[2].indexOf(".")==arr[2].length()-1)){    return;    }    if(!arr[1].equals("")&&arr[2].equals("-")){    return;    }    if(!arr[1].equals("")){    if(btnVal.equals("—")&&arr[2].equals("")){    arr[2]="-";    }    else if(arr[2].equals("")){    arr[1]=btnVal;    }    else{    setValue(count()+btnVal);    return;    }    }    else{    if(btnVal.equals("—")&&arr[0].equals("")){    arr[0]="-";    }    else{    arr[1]=btnVal;    }    }setValue(arr[0]+arr[1]+arr[2]);        }  }    // 数字按钮    class Number implements OnClickListener {          @Override          public void onClick(View v) {      Button btn=(Button)v;    String val="",btnVal=btn.getText().toString();    String[] arr=splitToArr();        if(flag&&arr[1].equals("")){        value="0";        arr[0]="0";        }        flag=false;        if(arr[1].equals("÷")&&btnVal.equals("0")){        return;        }    val=arr[1].equals("")?arr[0]:arr[2];if(btnVal.equals(".")&&(val.contains(".")||val.equals(""))){return;}if(val.contains(".")&&val.indexOf(".")==val.length()-3){return;}if(val.equals("0")){if(!btnVal.equals(".")){if(arr[1].equals("")){arr[0]=btnVal;}else{arr[2]=btnVal;}}else{if(arr[1].equals("")){arr[0]=arr[0]+btnVal;}else{arr[2]=arr[2]+btnVal;}}}else{if(arr[1].equals("")){arr[0]=arr[0]+btnVal;}else{arr[2]=arr[2]+btnVal;}}setValue(arr[0]+arr[1]+arr[2]);        }  }        //等于清空回退消费    class Operator implements OnClickListener {          @Override          public void onClick(View v) {          flag=false;        Button btn=(Button)v;        int id=btn.getId();        String arr[]=splitToArr();            if(id==R.id.clear){//清空            setValue("0");            return;            }            if(id==R.id.back){//撤销                if(arr[1].equals("")){                    if(arr[0].length()==1){                    arr[0]="0";                    }                    else                    {                    arr[0]=arr[0].substring(0,arr[0].length()-1);                    }                }                else{                if(arr[2].equals("")){                arr[1]="";                }                else{                arr[2]=arr[2].substring(0,arr[2].length()-1);                }                }                setValue(arr[0]+arr[1]+arr[2]);            }            if(id==R.id.txtcount){//消费            String val=count();            setValue(val);            consume(val);            return;            }            if(id==R.id.txteq){            setValue(count());            }        }    }}

XML布局文件:


0 0
原创粉丝点击