這篇文章將為大家詳細(xì)講解有關(guān)Android studio怎么實現(xiàn)簡單計算器,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
目前成都創(chuàng)新互聯(lián)公司已為近千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)頁空間、網(wǎng)站托管運營、企業(yè)網(wǎng)站設(shè)計、奎屯網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
Android是一種基于Linux內(nèi)核的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機(jī)和平板電腦,由美國Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。
具體內(nèi)容如下
需求分析
在Android studio中設(shè)計并實現(xiàn)一個簡單的計算器,實現(xiàn)連續(xù)的加減乘除運算。
界面設(shè)計
采用網(wǎng)格GridLayout布局,設(shè)計了一個6行4列的網(wǎng)格,最上邊是一個EditText用來顯示用戶輸入的運算數(shù)字和運算符,以及相關(guān)的運算結(jié)果,其占4列,文本框大小為50dip;依次往下的界面分別設(shè)置了數(shù)字和運算符以及操作的按鈕,各行各列的每個按鈕的大小均設(shè)為26sp。
編程分析
設(shè)計了兩個文件:1、控制文件MainActivity.java,完成按鈕的處理事件以及實現(xiàn)加減乘除及其結(jié)果輸出的功能,主要包括:顯示activity_main.xml定義的用戶界面;與用戶界面程序中的組件建立關(guān)聯(lián),并分別為每個組件注冊并實現(xiàn)監(jiān)聽接口;根據(jù)具體輸入和條件進(jìn)行運算并顯示結(jié)果等。2、布局文件activity_main.xml,完成計算器界面的網(wǎng)格布局設(shè)計,包括了一個文本編輯框和18個按鈕。
具體進(jìn)度
第1天:對簡單計算器進(jìn)行系統(tǒng)的功能和界面分析,形成自己大致的設(shè)計想法,然后根據(jù)老師建議的書本程序以及自己上網(wǎng)搜索的安卓項目的編程,系統(tǒng)地總結(jié)出自己編程的過程以及開始理解各類代碼。由于對移動編程這門課還不是很熟悉,所以對其中編程部分的理解為自己往后調(diào)試程序有很大的幫助。
第2天:開始敲代碼。由于第一次在Android studio上面編程,對這個軟件的各項操作都不熟悉,所以剛開始就在軟件摸索上面花費了較多的時間。由于此次設(shè)計的界面老師給了我們書本的模板,所以我選擇從簡單的布局文件的設(shè)計開始編程,一方面也方便自己熟悉Android studio。
第3天:開始根據(jù)自己的理解和想法開始設(shè)計并調(diào)試控制文件的程序。由于這部分設(shè)計到多種函數(shù)以及接口的設(shè)計以及實現(xiàn),運用的是java,由于對過去學(xué)的java語言有些遺忘了,而且現(xiàn)在還要涉及關(guān)于新知識.xml的結(jié)合,所以在這部分花的時間比較長。期間出現(xiàn)了較多的bug,雖然調(diào)試起來很吃力,但最終一點點把程序調(diào)試成功還是挺開心的。
第4天:原本以為程序調(diào)試成功就好了,但是沒想到最后在AVD的各種選擇和配置、調(diào)用問題上花了更多的時間和精力。由于第一次接觸Android studio,所以對其中很多配置都不了解,也是第一次聽說AVD,在最終運行這個計算器APP的時候在AVD的選擇和配置失敗上卡了較長時間,通過百度以及請教同學(xué),一步步地終于把最后這一步做好了。至此便完成了自己第一個簡單APP的開發(fā)。
心得體會
這是我的第一個安卓項目開發(fā),這個計算器代碼的邏輯都比較簡單,然后其功能也很不完善,是一個比較粗糙的設(shè)計。即便如此,由于自己對Android studio應(yīng)用程序設(shè)計的知識掌握得也不是很好,編程能力也比較弱,所以還是花了比較多的時間去研究和體會。但是,也正因為期間遇到的很多困難和bug,在自己一點點去設(shè)法解決的過程中也對這門課程的理論知識以及相關(guān)操作都有了更清晰的了解,現(xiàn)在明白了其中和大致框架和原理,為往后深入的學(xué)習(xí)和編程做好多一點基礎(chǔ)鞏固。
控制文件MainActivity.java
package com.example.df.firstapp; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; //引用按鈕組件 import android.widget.EditText; //引用文本編輯框組件 import android.text.TextUtils; //TextUtils類用于處理字符串 //定義實現(xiàn)監(jiān)聽接口的類MainActivity public class MainActivity extends AppCompatActivity implements View.OnClickListener { //聲明17個按鈕和一個文本編輯框 Button bt_num0,bt_num1,bt_num2,bt_num3,bt_num4,bt_num5,bt_num6,bt_num7, bt_num8,bt_num9,bt_delete,bt_div,bt_mult,bt_minus,bt_plus,bt_equal,bt_dot,bt_clear; private EditText et_calc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //顯示activity_main.xml定義的用戶界面 initViewAndListener(); //調(diào)用函數(shù)initViewAndListener() } //定義函數(shù)initViewAndListener(),用于與用戶界面程序中的組件建立關(guān)聯(lián),并分別注冊監(jiān)聽接口 private void initViewAndListener() { bt_num0 = (Button)findViewById(R.id.bt_num0); bt_num0.setOnClickListener(this); bt_num1 = (Button)findViewById(R.id.bt_num1); bt_num1.setOnClickListener(this); bt_num2 =(Button) findViewById(R.id.bt_num2); bt_num2.setOnClickListener(this); bt_num3 = (Button)findViewById(R.id.bt_num3); bt_num3.setOnClickListener(this); bt_num4 = (Button)findViewById(R.id.bt_num4); bt_num4.setOnClickListener(this); bt_num5 = (Button)findViewById(R.id.bt_num5); bt_num5.setOnClickListener(this); bt_num6 = (Button)findViewById(R.id.bt_num6); bt_num6.setOnClickListener(this); bt_num7 = (Button)findViewById(R.id.bt_num7); bt_num7.setOnClickListener(this); bt_num8 = (Button)findViewById(R.id.bt_num8); bt_num8.setOnClickListener(this); bt_num9 = (Button)findViewById(R.id.bt_num9); bt_num9.setOnClickListener(this); bt_delete = (Button)findViewById(R.id.bt_delete); bt_delete.setOnClickListener(this); bt_div = (Button)findViewById(R.id.bt_div); bt_div.setOnClickListener(this); bt_mult = (Button)findViewById(R.id.bt_mult); bt_mult.setOnClickListener(this); bt_minus = (Button)findViewById(R.id.bt_minus); bt_minus.setOnClickListener(this); bt_plus = (Button)findViewById(R.id.bt_plus); bt_plus.setOnClickListener(this); bt_equal = (Button)findViewById(R.id.bt_equal); bt_equal.setOnClickListener(this); et_calc = (EditText)findViewById(R.id.et_calc); bt_dot = (Button)findViewById(R.id.bt_dot); bt_dot.setOnClickListener(this); bt_clear = (Button)findViewById(R.id.bt_clear); bt_clear.setOnClickListener(this); } private boolean lastIsOperator; //記錄當(dāng)前是否進(jìn)行計算操作 private String lastOperators = ""; //記錄上一次進(jìn)行計算操作的結(jié)果 private double firstNumber = 0D; //定義并初始化第一次的取值 private double sencondNumber = 0D; //定義并初始化第二次的取值 //onClick()方法,觸發(fā)OnClickListener接口 public void onClick(View v) { String currentText = et_calc.getText().toString(); //獲取當(dāng)前文本編輯框的內(nèi)容 String operatorNumber = ""; //定義并初始化操作數(shù)為”” if (currentText.equals("0")) { //若當(dāng)前輸入數(shù)為0則設(shè)置文本編輯框為”” et_calc.setText(""); } operatorNumber = et_calc.getText().toString(); //根據(jù)編輯框的內(nèi)容更改操作數(shù)值 if(!lastOperators.equals("")) //判斷上一次操作的數(shù)是否為空,非空則建立索引,隨之修改當(dāng)前操作數(shù) { int index = operatorNumber.lastIndexOf(lastOperators); operatorNumber = operatorNumber.substring(index+1); } //分別獲取按鈕的內(nèi)容至文本編輯框 switch (v.getId()) { case R.id.bt_num0: et_calc.setText(et_calc.getText() + "0"); lastIsOperator = false; break; case R.id.bt_num1: et_calc.setText(et_calc.getText() + "1"); lastIsOperator = false; break; case R.id.bt_num2: et_calc.setText(et_calc.getText() + "2"); lastIsOperator = false; break; case R.id.bt_num3: et_calc.setText(et_calc.getText() + "3"); lastIsOperator = false; break; case R.id.bt_num4: et_calc.setText(et_calc.getText() + "4"); lastIsOperator = false; break; case R.id.bt_num5: et_calc.setText(et_calc.getText() + "5"); lastIsOperator = false; break; case R.id.bt_num6: et_calc.setText(et_calc.getText() + "6"); lastIsOperator = false; break; case R.id.bt_num7: et_calc.setText(et_calc.getText() + "7"); lastIsOperator = false; break; case R.id.bt_num8: et_calc.setText(et_calc.getText() + "8"); lastIsOperator = false; break; case R.id.bt_num9: et_calc.setText(et_calc.getText() + "9"); lastIsOperator = false; break; case R.id.bt_dot: et_calc.setText(et_calc.getText() + "."); lastIsOperator = false; break; //歸零按鈕,將當(dāng)前操作數(shù)直接清零 case R.id.bt_clear: et_calc.setText(""); lastIsOperator = false; firstNumber=0D; sencondNumber=0D; lastOperators="="; break; //清除按鈕,若當(dāng)前文本編輯框內(nèi)容為空,點擊一次則刪除一個字符串 case R.id.bt_delete: if (TextUtils.isEmpty(et_calc.getText())) { return; } lastIsOperator = false; et_calc.setText(currentText.substring(0, currentText.length() - 1).length() > 0 ? currentText.substring(0, currentText.length() - 1) : "0"); break; //計算按鈕,若當(dāng)前內(nèi)容非空、或者以及上一次有操作記錄且記錄不是”=”的情況下,將當(dāng)前的操作記錄設(shè)置為+、-、*、/、= case R.id.bt_div: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals("=")) { return; } opratorCalc(operatorNumber,"÷"); lastIsOperator = true; et_calc.setText(et_calc.getText() + "÷"); lastOperators = "÷"; break; case R.id.bt_mult: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals("=")) { return; } opratorCalc(operatorNumber,"*"); lastIsOperator = true; et_calc.setText(et_calc.getText() + "*"); lastOperators = "*"; break; case R.id.bt_minus: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals("=")) { return; } opratorCalc(operatorNumber,"-"); lastIsOperator = true; et_calc.setText(et_calc.getText() + "-"); lastOperators = "-"; break; case R.id.bt_plus: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals("=")) { return; } opratorCalc(operatorNumber,"+"); lastIsOperator = true; et_calc.setText(et_calc.getText() + "+"); lastOperators = "+"; break; case R.id.bt_equal: double result = 0D; if(TextUtils.isEmpty(lastOperators)) { return; } opratorResult(operatorNumber); sencondNumber = 0D; lastOperators ="="; lastIsOperator = true; et_calc.setText(et_calc.getText() + "\n=" + String.valueOf(firstNumber)); break; } } //運算函數(shù),按具體操作進(jìn)行+、-、*、/的運算 private void operate(String operatorNumber) { if(sencondNumber != 0D) //計算情況一:第二次輸入的數(shù)不為0 { if(lastOperators.equals("÷")) { sencondNumber = sencondNumber / Double.parseDouble(operatorNumber); firstNumber = firstNumber / sencondNumber; } else if(lastOperators.equals("*")) { sencondNumber = sencondNumber * Double.parseDouble(operatorNumber); firstNumber = firstNumber * sencondNumber; } else if(lastOperators.equals("+")) { sencondNumber = Double.parseDouble(operatorNumber); firstNumber = firstNumber + sencondNumber; } else if(lastOperators.equals("-")) { sencondNumber = Double.parseDouble(operatorNumber); firstNumber = firstNumber - sencondNumber; } } Else //計算情況二:第二次輸入的數(shù)為0 { if(lastOperators.equals("÷")) { firstNumber = firstNumber / Double.parseDouble(operatorNumber); } else if(lastOperators.equals("*")) { firstNumber = firstNumber * Double.parseDouble(operatorNumber); } else if(lastOperators.equals("+")) { firstNumber = firstNumber + Double.parseDouble(operatorNumber); } else if(lastOperators.equals("-")) { firstNumber= firstNumber - Double.parseDouble(operatorNumber); } } } //分別返回計算結(jié)果 public void opratorResult(String operatorNumber) { operate(operatorNumber); } //按當(dāng)前計算結(jié)果進(jìn)行下一次的數(shù)據(jù)輸入及計算 public void opratorCalc(String operatorNumber,String currentOprator) { if(TextUtils.isEmpty(lastOperators)) { firstNumber = Double.parseDouble(operatorNumber); return; } if(lastOperators.equals(currentOprator)) { if(lastOperators.equals("÷")) { firstNumber = firstNumber / Double.parseDouble(operatorNumber); } else if(lastOperators.equals("*")) { firstNumber = firstNumber * Double.parseDouble(operatorNumber); } else if(lastOperators.equals("+")) { firstNumber = firstNumber + Double.parseDouble(operatorNumber); } else if(lastOperators.equals("-")) { firstNumber = firstNumber - Double.parseDouble(operatorNumber); } return; } operate(operatorNumber); } }
布局文件activity_main.xml
關(guān)于“Android studio怎么實現(xiàn)簡單計算器”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。