下面介紹mainactivity
package com.mingrisoft; import android.content.Context; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import com.mingrisoft.Calculator; import com.mingrisoft.IsSecondNumZero; public class MainActivity extends Activity implements View.OnClickListener { TextView textView; Button btn_1; Button btn_2; Button btn_3; Button btn_4; Button btn_5; Button btn_6; Button btn_7; Button btn_8; Button btn_9; Button btn_10; Button btn_11; Button btn_12; Button btn_13; Button btn_14; Button btn_15; Button btn_16; Button btn_17; Button btn_18; Button btn_19; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView= (TextView) findViewById(R.id.tv_show); btn_1= (Button) findViewById(R.id.btn_1); btn_2= (Button) findViewById(R.id.btn_2); btn_3= (Button) findViewById(R.id.btn_3); btn_4= (Button) findViewById(R.id.btn_4); btn_5= (Button) findViewById(R.id.btn_5); btn_6= (Button) findViewById(R.id.btn_6); btn_7= (Button) findViewById(R.id.btn_7); btn_8= (Button) findViewById(R.id.btn_8); btn_9= (Button) findViewById(R.id.btn_9); btn_10= (Button) findViewById(R.id.btn_10); btn_11= (Button) findViewById(R.id.btn_11); btn_12= (Button) findViewById(R.id.btn_12); btn_13= (Button) findViewById(R.id.btn_13); btn_14= (Button) findViewById(R.id.btn_14); btn_15= (Button) findViewById(R.id.btn_15); btn_16= (Button) findViewById(R.id.btn_16); btn_17= (Button) findViewById(R.id.btn_17); btn_18= (Button) findViewById(R.id.btn_18); btn_19= (Button) findViewById(R.id.btn_19); btn_1.setOnClickListener(this); btn_2.setOnClickListener(this); btn_3.setOnClickListener(this); btn_4.setOnClickListener(this); btn_5.setOnClickListener(this); btn_6.setOnClickListener(this); btn_7.setOnClickListener(this); btn_8.setOnClickListener(this); btn_9.setOnClickListener(this); btn_10.setOnClickListener(this); btn_11.setOnClickListener(this); btn_12.setOnClickListener(this); btn_13.setOnClickListener(this); btn_14.setOnClickListener(this); btn_15.setOnClickListener(this); btn_16.setOnClickListener(this); btn_17.setOnClickListener(this); btn_18.setOnClickListener(this); btn_19.setOnClickListener(this); } //根據手機的分辨率從dp單位轉換成px單位 public static int dip2px(Context context,float dpValue){ //獲取當前手機的像素密度 final float scale=context.getResources().getDisplayMetrics().density; return (int)(dpValue*scale+0.5f); //四舍五入取整 } //根據手機的分辨率從px單位轉換成dp單位 public static int px2dip(Context context,float pxValue){ //獲取當前手機的像素密度 final float scale=context.getResources().getDisplayMetrics().density; return (int)(pxValue/scale+0.5f); //四舍五入取整 } public static int getScreenWidth(Context context){ //從系統服務中獲取窗口管理器 WindowManager windowManager=(WindowManager)context.getSystemService(context.WINDOW_SERVICE); DisplayMetrics displayMetrics=new DisplayMetrics(); //從默認顯示器中獲取顯示參數保存到displayMetrics對象中 windowManager.getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.widthPixels; //返回屏幕的寬度數值 } public static int getScreenHeight(Context context){ //從系統服務中獲取窗口管理器 WindowManager windowManager=(WindowManager)context.getSystemService(context.WINDOW_SERVICE); DisplayMetrics displayMetrics=new DisplayMetrics(); //從默認顯示器中獲取顯示參數保存到displayMetrics對象中 windowManager.getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.heightPixels; //返回屏幕的高度數值 } public static float getScreenDensity(Context context){ //從系統服務中獲取窗口管理器 WindowManager windowManager=(WindowManager)context.getSystemService(context.WINDOW_SERVICE); DisplayMetrics displayMetrics=new DisplayMetrics(); //從默認顯示器中獲取顯示參數保存到displayMetrics對象中 windowManager.getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.density; //返回屏幕的高度數值 } @Override public void onClick(View view) { String text=textView.getText().toString(); String[] number=text.split("[+|-|*|/|=]"); String lastnumber=""; if(number.length>0) lastnumber=number[number.length-1]; switch (view.getId()){ case R.id.btn_1: case R.id.btn_16://刪除數字鍵,計算完畢后點擊全部清除,表達式書寫中則去除最后一個字符 if(text.contains("=")){ textView.setText(""); }else { if (text.length() > 0) textView.setText(text.substring(0, text.length() - 1)); } break; case R.id.btn_2: //除號鍵,判定是否計算完成,若完成則取結果繼續運算 if(text.length()>0) { if(text.contains("=")){ textView.setText(lastnumber+"/"); } //判斷前面字符是否為符號,若是,則將其改為當前輸入符號(注意兩符號不能同時出現) else { if (text.substring(text.length() - 1).equals("+") == false && text.substring(text.length() - 1).equals("-") == false && text.substring(text.length() - 1).equals("*") == false && text.substring(text.length() - 1).equals("/") == false && text.substring(text.length() - 1).equals(".") == false) textView.setText(text + "/"); else if (text.substring(text.length() - 1).equals("+") == true || text.substring(text.length() - 1).equals("-") == true || text.substring(text.length() - 1).equals("*") == true || text.substring(text.length() - 1).equals("/") == true) textView.setText(text.substring(0, text.length() - 1) + "/"); } } break; case R.id.btn_3: //乘號鍵,用法大致同除號 if(text.length()>0) { if(text.contains("=")){ textView.setText(lastnumber+"*"); } else { if (text.substring(text.length() - 1).equals("+") == false && text.substring(text.length() - 1).equals("-") == false && text.substring(text.length() - 1).equals("*") == false && text.substring(text.length() - 1).equals("/") == false && text.substring(text.length() - 1).equals(".") == false) textView.setText(text + "*"); else if (text.substring(text.length() - 1).equals("+") == true || text.substring(text.length() - 1).equals("-") == true || text.substring(text.length() - 1).equals("*") == true || text.substring(text.length() - 1).equals("/") == true) textView.setText(text.substring(0, text.length() - 1) + "*"); } } break; case R.id.btn_4: //全部清除鍵 textView.setText(""); break; case R.id.btn_5: //數字7,判斷組合數字首位是否為0,若是,則將其置為7,下面數字用法類似 if(text.contains("=")) { textView.setText("7"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "7"); }else textView.setText(text+"7"); break; case R.id.btn_6: if(text.contains("=")) { textView.setText("8"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "8"); }else textView.setText(text+"8"); break; case R.id.btn_7: if(text.contains("=")) { textView.setText("9"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "9"); }else textView.setText(text+"9"); break; case R.id.btn_8: if(text.length()>0) { if(text.contains("=")){ textView.setText(lastnumber+"+"); } else { if (text.substring(text.length() - 1).equals("+") == false && text.substring(text.length() - 1).equals("-") == false && text.substring(text.length() - 1).equals("*") == false && text.substring(text.length() - 1).equals("/") == false && text.substring(text.length() - 1).equals(".") == false) textView.setText(text + "+"); else if (text.substring(text.length() - 1).equals("+") == true || text.substring(text.length() - 1).equals("-") == true || text.substring(text.length() - 1).equals("*") == true || text.substring(text.length() - 1).equals("/") == true) textView.setText(text.substring(0, text.length() - 1) + "+"); } } break; case R.id.btn_9: if(text.contains("=")) { textView.setText("4"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "4"); }else textView.setText(text+"4"); break; case R.id.btn_10: if(text.contains("=")) { textView.setText("5"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "5"); }else textView.setText(text+"5"); break; case R.id.btn_11: if(text.contains("=")) { textView.setText("6"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "6"); }else textView.setText(text+"6"); break; case R.id.btn_12: if(text.length()>0) { if(text.contains("=")){ textView.setText(lastnumber+"-"); } else { if (text.substring(text.length() - 1).equals("+") == false && text.substring(text.length() - 1).equals("-") == false && text.substring(text.length() - 1).equals("*") == false && text.substring(text.length() - 1).equals("/") == false && text.substring(text.length() - 1).equals(".") == false) textView.setText(text + "-"); else if (text.substring(text.length() - 1).equals("+") == true || text.substring(text.length() - 1).equals("-") == true || text.substring(text.length() - 1).equals("*") == true || text.substring(text.length() - 1).equals("/") == true) textView.setText(text.substring(0, text.length() - 1) + "-"); } } break; case R.id.btn_13: if(text.contains("=")) { textView.setText("1"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "1"); }else textView.setText(text+"1"); break; case R.id.btn_14: if(text.contains("=")) { textView.setText("2"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "2"); }else textView.setText(text+"2"); break; case R.id.btn_15: if(text.contains("=")) { textView.setText("3"); }else if((text.length()>2&&text.charAt(text.length()-1)=='0'&&isOperation(text.charAt(text.length()-2)))||(text.length()==1&&text.charAt(0)=='0')) { textView.setText(text.substring(0, text.length() - 1) + "3"); }else textView.setText(text+"3"); break; case R.id.btn_17: if(text.contains("=")) { textView.setText("0"); }else { //判斷當前數字是否僅為“0”,即不包含小數點,數字頭不能出現多個0 if (lastnumber.equals("0") == false) textView.setText(text + "0"); } break; case R.id.btn_18: //小數點,判斷是否計算完成,若是,則打印0. if(text.contains("=")) { textView.setText("0."); }else if(lastnumber.contains(".")==false){//保證同一數字里只有一個小數點 if (text.length() > 0) { if (text.substring(text.length() - 1).equals("+") == false && text.substring(text.length() - 1).equals("-") == false && text.substring(text.length() - 1).equals("*") == false && text.substring(text.length() - 1).equals("/") == false && text.substring(text.length() - 1).equals(".") == false) textView.setText(text + "."); else if (text.substring(text.length() - 1).equals("+") == true || text.substring(text.length() - 1).equals("-") == true || text.substring(text.length() - 1).equals("*") == true || text.substring(text.length() - 1).equals("/") == true) textView.setText(text + "0."); } else { textView.setText("0."); } } break; case R.id.btn_19: if(text.contains("=")==false) { if (IsSecondNumZero.isAvailable(text + "=")) {//判斷除法是除數為0的情況 Toast.makeText(MainActivity.this, "除數不能為0", Toast.LENGTH_LONG).show(); } else {//通過棧進行結果運算 Calculator calculator = new Calculator(); String result = calculator.convertDoubleToString(calculator.calculate(text)); textView.setText(text + "=" + result); } } break; } } public boolean isOperation(char c){ return c=='+'||c=='-'||c=='*'||c=='/'; } }
