android實現的簡單的計算器(原始碼+打包好的apk檔案)
阿新 • • 發佈:2018-12-09
一、啥也不說,先看效果
二、再來看一下目錄結構吧:
三、原始碼:
.java檔案
package com.kjgym.mycalculatorv10; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; public class CalculatorActivity extends AppCompatActivity implements View.OnClickListener { private EditText EV_Result; // 結果框 private double currentResult = 0.0; // 儲存數字及結果 private boolean firstDigit = true; // 標誌使用者按的是否是整個表示式的第一個數字,或者是運算子後的第一個數字 private String operator = "="; // 當前運算的運算子 private boolean operateValidFlag = true; // 操作是否合法 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_calculator); // 控制元件初始化及新增監聽事件 this.init(); } /** * 點選事件過載方法 * @param v 當前點選的控制元件 */ @Override public void onClick(View v) { String pre = ((Button) v).getText().toString(); Log.i("TAG", pre); switch (v.getId()) { case R.id.Btn_Back: setBtn_Back(); break; case R.id.Btn_C: setBtn_C(); break; case R.id.Btn_Num0: case R.id.Btn_Num1: case R.id.Btn_Num2: case R.id.Btn_Num3: case R.id.Btn_Num4: case R.id.Btn_Num5: case R.id.Btn_Num6: case R.id.Btn_Num7: case R.id.Btn_Num8: case R.id.Btn_Num9: case R.id.Btn_DecimalPoint: setNum(pre); break; case R.id.Btn_Subtraction: case R.id.Btn_Addition: case R.id.Btn_ModuloDivision: case R.id.Btn_Multiplication: case R.id.Btn_Division: case R.id.Btn_Equal: setOperator(pre); break; } } /** * 點選運算子處理 * @param label 接收當前點選的運算子 */ public void setOperator(String label) { switch (operator){ case "/": // 除法運算 // 如果當前結果文字框中的值等於0 if (getNumFromEV_Result() == 0.0) { // 操作不合法 operateValidFlag = false; EV_Result.setText("除數不能為零!"); } else { currentResult /= getNumFromEV_Result(); } break; case "+": // 加法運算 currentResult += getNumFromEV_Result(); break; case "-": // 減法運算 currentResult -= getNumFromEV_Result(); break; case "*": // 加法運算 currentResult *= getNumFromEV_Result(); break; case "%": // 加法運算 currentResult %= getNumFromEV_Result(); break; case "=": // 賦值運算 currentResult = getNumFromEV_Result(); break; } if (operateValidFlag) { // 雙精度浮點數的運算 long t1; double t2; t1 = (long) currentResult; t2 = currentResult - t1; if (t2 == 0) { EV_Result.setText(String.valueOf(t1)); } else { EV_Result.setText(String.valueOf(currentResult)); } } // 運算子等於使用者按的按鈕 operator = label; firstDigit = true; operateValidFlag = true; } /** * 點選數字處理 * @param n 接收當前點選的數字 */ public void setNum(String n) { if (firstDigit) { // 輸入的第一個數字 EV_Result.setText(n); } else if ((n.equals(".")) && (!EV_Result.getText().toString().contains("."))) { // 輸入的是小數點,並且之前沒有小數點,則將小數點附在結果文字框的後面 String str = EV_Result.getText().toString(); str += "."; EV_Result.setText(str); } else if (!n.equals(".")) { // 如果輸入的不是小數點,則將數字附在結果文字框的後面 String str = EV_Result.getText().toString(); str += n; EV_Result.setText(str); } // 以後輸入的肯定不是第一個數字了 firstDigit = false; } /** * 從文字框中獲取數字 * * @return result */ public double getNumFromEV_Result() { double result = 0; try { result = Double.valueOf(EV_Result.getText().toString()); } catch (NumberFormatException e) { Log.i("TAG","您輸入的不是數字"); } return result; } /** * 設定清空C鍵 */ public void setBtn_C() { EV_Result.setText("0"); firstDigit = true; operator = "="; } /** * 設定返回Back鍵 */ public void setBtn_Back() { String currentResult = EV_Result.getText().toString(); int i = currentResult.length(); if (i > 0) { currentResult = currentResult.substring(0, i - 1); // 將文字最後一個字元去掉 if (currentResult.length() == 0) { // 如果沒有了內容,初始化計算器的各種值 EV_Result.setText("0"); } else { EV_Result.setText(currentResult); // 顯示新的文字 } } } /** * 初始化控制元件 */ public void init() { EV_Result = findViewById(R.id.EV_result); // 第一行 Button Btn_C; // 清空結果框 Button Btn_Back; // 返回 Button Btn_ModuloDivision; // 模除 Button Btn_Division; // 除法 // 第二行 Button Btn_Num7; Button Btn_Num8; Button Btn_Num9; Button Btn_Multiplication; // 乘發 // 第三行 Button Btn_Num4; Button Btn_Num5; Button Btn_Num6; Button Btn_Subtraction; // 減法 // 第四行 Button Btn_Num1; Button Btn_Num2; Button Btn_Num3; Button Btn_Addition; // 加法 // 第五行 Button Btn_Num0; Button Btn_DecimalPoint; // 小數點 Button Btn_Equal; // 等於 Btn_C = findViewById(R.id.Btn_C); Btn_Back = findViewById(R.id.Btn_Back); Btn_ModuloDivision = findViewById(R.id.Btn_ModuloDivision); Btn_Division = findViewById(R.id.Btn_Division); Btn_Num7 = findViewById(R.id.Btn_Num7); Btn_Num8 = findViewById(R.id.Btn_Num8); Btn_Num9 = findViewById(R.id.Btn_Num9); Btn_Multiplication = findViewById(R.id.Btn_Multiplication); Btn_Num4 = findViewById(R.id.Btn_Num4); Btn_Num5 = findViewById(R.id.Btn_Num5); Btn_Num6 = findViewById(R.id.Btn_Num6); Btn_Subtraction = findViewById(R.id.Btn_Subtraction); Btn_Num1 = findViewById(R.id.Btn_Num1); Btn_Num2 = findViewById(R.id.Btn_Num2); Btn_Num3 = findViewById(R.id.Btn_Num3); Btn_Addition = findViewById(R.id.Btn_Addition); Btn_Num0 = findViewById(R.id.Btn_Num0); Btn_DecimalPoint = findViewById(R.id.Btn_DecimalPoint); Btn_Equal = findViewById(R.id.Btn_Equal); Btn_C.setOnClickListener(this); Btn_Back.setOnClickListener(this); Btn_ModuloDivision.setOnClickListener(this); Btn_Division.setOnClickListener(this); Btn_Num7.setOnClickListener(this); Btn_Num8.setOnClickListener(this); Btn_Num9.setOnClickListener(this); Btn_Multiplication.setOnClickListener(this); Btn_Num4.setOnClickListener(this); Btn_Num5.setOnClickListener(this); Btn_Num6.setOnClickListener(this); Btn_Subtraction.setOnClickListener(this); Btn_Num1.setOnClickListener(this); Btn_Num2.setOnClickListener(this); Btn_Num3.setOnClickListener(this); Btn_Addition.setOnClickListener(this); Btn_Num0.setOnClickListener(this); Btn_DecimalPoint.setOnClickListener(this); Btn_Equal.setOnClickListener(this); } }
.xml檔案
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".CalculatorActivity"> <!-- 結果 --> <EditText android:id="@+id/EV_result" android:layout_width="match_parent" android:layout_height="60dp" android:gravity="right" android:cursorVisible="false" android:textSize="25sp" android:paddingBottom="0dp" android:text="0" /> <GridLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:columnCount="4"> <Button android:id="@+id/Btn_C" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Clear"/> <Button android:id="@+id/Btn_Back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Back"/> <Button android:id="@+id/Btn_ModuloDivision" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="%"/> <Button android:id="@+id/Btn_Division" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="/"/> <Button android:id="@+id/Btn_Num7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="7"/> <Button android:id="@+id/Btn_Num8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="8"/> <Button android:id="@+id/Btn_Num9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="9"/> <Button android:id="@+id/Btn_Multiplication" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="*"/> <Button android:id="@+id/Btn_Num4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="4"/> <Button android:id="@+id/Btn_Num5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="5"/> <Button android:id="@+id/Btn_Num6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="6"/> <Button android:id="@+id/Btn_Subtraction" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="-"/> <Button android:id="@+id/Btn_Num1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="1"/> <Button android:id="@+id/Btn_Num2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2"/> <Button android:id="@+id/Btn_Num3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="3"/> <Button android:id="@+id/Btn_Addition" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="+"/> <Button android:id="@+id/Btn_Num0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_columnSpan="2" android:layout_gravity="fill" android:text="0"/> <Button android:id="@+id/Btn_DecimalPoint" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="."/> <Button android:id="@+id/Btn_Equal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="="/> </GridLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginTop="20sp" android:weightSum="10"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="6" android:text="本程式由Kj純手工獨自打造。。。" android:layout_marginTop="40dp" android:gravity="center_horizontal" android:textSize="20sp" android:textStyle="bold" /> <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/cj" android:layout_weight="4" android:layout_marginTop="10px" android:scaleType="center" /> </LinearLayout> </LinearLayout>