当前位置:数据分析 > Android 小案例 -- 计算器

Android 小案例 -- 计算器

  • 发布:2023-09-26 11:47

摘要:

计算器的界面分为两大部分,第一部分是上方的计算表达式,既包括用户的按键输入,也包括计算结果数字;第二部分是下方的各个按键,例如:从0到9的数字按钮、加减乘除与等号、正负号按钮、小数点按钮、求倒数按钮、开方按钮以及删除、清空、取消等控制按钮

分析:

  1. 线性布局LinearLayout:计算器的整体布局是从上到下排列着的

  2. 网格布局GridLayout:计算器下半部分的几排按钮,正好成五行四列表格分布,适合采用GridLayout

  3. 滚动视图ScrollView:计算器界面如果超出屏幕大小,就要支持滚动

  4. 文本视图TextView:计算结果文本需要使用TextView,且文字靠下靠右显示

  5. 按钮Button:用于0-9的数字按键,以及加减乘除等运算按键

  6. 图像按钮ImageButton:开根号的运算符虽然能够打出来,但是右上角少了一横,所以该按钮要用一张标准的开根号图片显示

效果:

常量文件

1、buttonstyle.xml

宽高常量


30sp70dp

2、strings.xml

SimpleControl世界未来与你相伴!!!计算器CE÷×C789+456-1231/x0.=

3、AndroidManifest.xml


4、colors.xml


#FFBB86FC#FF6200EE#FF3700B3#FF03DAC5#FF018786#FF000000#FFFFFFFF#058531#666666#FFFF00#FF0033#0066CC#33CC33

5、themes.xml

布局文件

1、activity_calculator.xml



逻辑处理代码

1、www.sychzs.cn

package com.example.simplecontrol;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;import java.sql.Array;public class CalculatorActivity extends AppCompatActivity implements View.OnClickListener {private TextView tv_result_calculator;//第一个操作数private String firstNum = "";//运算符private String operator = "";//第二个操作数private String secondNum = "";//当前计算结果private String result = "";//显示的文本内容private String showText = "";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_calculator);//布局文件种获取tv_result_calculator文本视图tv_result_calculator = findViewById(www.sychzs.cn_result_calculator);//下面给每个按钮控件都注册了点击监听器findViewById(R.id.btn_cancel).setOnClickListener(this);//"除法"按钮findViewById(R.id.btn_divide).setOnClickListener(this);//"乘法”按钮findViewById(R.id.btn_multiply).setOnClickListener(this);//"清除" 按钮findViewById(R.id.btn_clear).setOnClickListener(this);//1 数字7findViewById(R.id.btn_seven).setOnClickListener(this);//数字8findViewById(R.id.btn_eight).setOnClickListener(this);//数字9findViewById(R.id.btn_nine).setOnClickListener(this);//"加法"按钮findViewById(R.id.btn_add).setOnClickListener(this);//数字4findViewById(R.id.btn_four).setOnClickListener(this);//数字5findViewById(R.id.btn_five).setOnClickListener(this);//数字6findViewById(R.id.btn_six).setOnClickListener(this);//"减法"findViewById(R.id.btn_minus).setOnClickListener(this);//数字1按钮findViewById(R.id.btn_one).setOnClickListener(this);//数字2findViewById(R.id.btn_two).setOnClickListener(this);//数字3findViewById(R.id.btn_three).setOnClickListener(this);//求倒数按钮findViewById(R.id.btn_reciprocal).setOnClickListener(this);//数字0findViewById(R.id.btn_zero).setOnClickListener(this);//"小数点" 按钮findViewById(R.id.btn_dot).setOnClickListener(this);// "等号"按钮findViewById(R.id.btn_equal).setOnClickListener(this);// "开平方"按钮findViewById(R.id.btn_sqrt).setOnClickListener(this);}@Overridepublic void onClick(View v) {String inputText;//如果是根号按钮if (v.getId() == R.id.btn_sqrt) {inputText = "√";} else {//其他的按钮 转换成文本内容inputText = ((TextView) v).getText().toString();}switch (v.getId()) {//清除按钮case R.id.btn_clear:clear();refreshText("0");break;//取消按钮case R.id.btn_cancel:if (operator.equals("")) {if (firstNum.length() == 1) {firstNum = "0";} else if (firstNum.length() > 1) {firstNum = firstNum.substring(0, firstNum.length() - 1);} else {Toast.makeText(this, "0", Toast.LENGTH_SHORT).show();}showText = firstNum;refreshText(showText);}else if(!operator.equals("") ){if(secondNum.length() == 1){secondNum = "";}else if(secondNum.length() > 1){secondNum = secondNum.substring(0,secondNum.length()-1);}else if(secondNum.length() == 0){Toast.makeText(this,"0",Toast.LENGTH_SHORT).show();}showText = showText.substring(0,showText.length()-1);refreshText(showText);}break;//加、减、乘、除按钮case R.id.btn_add:case R.id.btn_minus:case R.id.btn_multiply:case R.id.btn_divide://运算符operator = inputText;refreshText(showText + operator);break;//等号按钮case R.id.btn_equal:// 加减乘除进行四则运算double calculate_result = calculateFour();refreshOperate(String.valueOf(calculate_result));refreshText(showText + "=" + result);break;//开根号按钮case R.id.btn_sqrt:double sqrt_result = Math.sqrt(Double.parseDouble(firstNum));refreshOperate(String.valueOf(sqrt_result));refreshText(showText + "√=" + result);break;//求倒数按钮case R.id.btn_reciprocal:double reciprocal = 1.0 / Double.parseDouble(firstNum);refreshOperate(String.valueOf(reciprocal));refreshText(showText + "/=" + result);break;//其他按钮,包括数字和小数点default:if (result.length() > 0 && operator.equals("")) {clear();}// 判断是否为运算符if (operator.equals("")) {//五运算符firstNum = firstNum + inputText;} else {//有算符secondNum = secondNum + inputText;}//整数不需要前面的 0 和 .if (showText.equals("0") && inputText.equals(".")) {//显示内容refreshText(inputText);} else {refreshText(showText + inputText);}break;}}//四则运算 ,返回结果private double calculateFour() {switch (operator) {case "+":return Double.parseDouble(firstNum) + Double.parseDouble(secondNum);case "-":return Double.parseDouble(firstNum) - Double.parseDouble(secondNum);case "×":return Double.parseDouble(firstNum) * Double.parseDouble(secondNum);default:return Double.parseDouble(firstNum) / Double.parseDouble(secondNum);}}//清空、并初始化private void clear() {refreshOperate("");refreshText("");}//刷新运算结果private void refreshOperate(String new_result) {result = new_result;//连续计算 下一次结果,就变成下一次计算的第一个数字firstNum = result;secondNum = "";operator = "";}//刷新显示文本public void refreshText(String text) {showText = text;tv_result_calculator.setText(showText);}
}

初学者。

相关文章

最新资讯

热门推荐