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
- 简单的android计算器
- android简单计算器
- android简单计算器
- Android简单计算器
- android简单计算器
- Android简单计算器
- Android简单计算器程序
- Android简单计算器
- Android实现简单计算器
- 简单的android计算器
- Android简单人品计算器
- android简单计算器实现
- Android--简单计算器
- android 简单的计算器
- Android简单计算器实现
- android开发简单的计算器
- android开发简单的计算器
- Android---9---简单的计算器
- 1.Report Estimation
- 数据结构
- 光热隔热个人个
- Mybatis-Spring-注入映射器
- 《WCF服务编程》笔记-WCF基础知识
- Android简单计算器
- Linux redis 安装
- [LeetCode]Symmetric Tree
- ntp原理
- warning: LF will be replaced by CRLF | fatal: CRLF would be replaced by LF
- 生成随机字母
- 关于LDR命令
- document.all用法
- [Google Guava] 1.1-使用和避免null