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了,就是这样,其他个别的配置自己来吧