android简单计算器

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;
			}
		};
	};
  
	@Override
	
	protected 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){
<span style="white-space:pre">		</span>//自己的一个项目功能,所以干掉了
	}
	
	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
<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>

ok了,就是这样,其他个别的配置自己来吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值