【Android学习】简易计算器的实现

embedded/2024/9/23 9:25:26/

 1.项目基础目录

新增dimens.xml 用于控制全部按钮的尺寸。图片资源放在drawable中。

 另外 themes.xml中原来的

    <style name="Theme.Learn" parent="Theme.MaterialComponents.DayNight.DarkActionBar">

 变为了,加上后可针对button中增加图片和文字修改背景。

    <style name="Theme.Learn" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">

2. XML代码

UI效果

<?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:background="#888888"android:orientation="vertical"><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:gravity="center"android:text="@string/calTitle"android:textColor="@color/black"android:textSize="17sp" /><TextViewandroid:id="@+id/tv_res"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginLeft="8dp"android:layout_marginTop="5dp"android:layout_marginRight="8dp"android:background="#FFFFFF"android:gravity="right|bottom"android:lines="3"android:text="0"android:textColor="@color/black"android:textSize="25sp" /><GridLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:columnCount="4"android:rowCount="5"android:layout_marginTop="10dp"><Buttonandroid:id="@+id/btn_ce"android:text="@string/CE"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_multi"android:text="@string/multi"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_divide"android:text="@string/divide"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_back"android:text="@string/back"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_seven"android:text="@string/seven"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_eight"android:text="@string/eight"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_nine"android:text="@string/nine"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_plus"android:text="@string/plus"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_four"android:text="@string/four"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_five"android:text="@string/five"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_six"android:text="@string/six"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_minus"android:text="@string/minus"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_one"android:text="@string/one"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_two"android:text="@string/two"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_three"android:text="@string/three"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><ImageButtonandroid:id="@+id/btn_radical"android:src="@drawable/radical"android:scaleType="centerInside"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck"/><Buttonandroid:id="@+id/btn_fraction"android:text="@string/fraction"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_zero"android:text="@string/zero"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_point"android:text="@string/point"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/><Buttonandroid:id="@+id/btn_equal"android:text="@string/equal"android:layout_width="0dp"android:layout_height="@dimen/btn_height"android:layout_columnWeight="1"android:gravity="center"android:textSize="@dimen/btn_font_size"android:textColor="@color/black"/></GridLayout></LinearLayout></ScrollView></LinearLayout>

3.Java代码

package com.example.learn;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;public class CalActivity extends AppCompatActivity implements View.OnClickListener {//运算符private String operator = "";//第一个操作数private String firstNum = "";//第二个操作数private String secondNum = "";//结果private String result = "";//显示的文本内容private String showText = "";//记录结果private TextView tv_res;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_cal);//发现页面控件tv_res = findViewById(R.id.tv_res);//Button 组件//1 运算符findViewById(R.id.btn_back).setOnClickListener(this);findViewById(R.id.btn_ce).setOnClickListener(this);findViewById(R.id.btn_plus).setOnClickListener(this);findViewById(R.id.btn_minus).setOnClickListener(this);findViewById(R.id.btn_multi).setOnClickListener(this);findViewById(R.id.btn_divide).setOnClickListener(this);findViewById(R.id.btn_radical).setOnClickListener(this);findViewById(R.id.btn_equal).setOnClickListener(this);findViewById(R.id.btn_fraction).setOnClickListener(this);findViewById(R.id.btn_point).setOnClickListener(this);//2、数字findViewById(R.id.btn_zero).setOnClickListener(this);findViewById(R.id.btn_one).setOnClickListener(this);findViewById(R.id.btn_two).setOnClickListener(this);findViewById(R.id.btn_three).setOnClickListener(this);findViewById(R.id.btn_four).setOnClickListener(this);findViewById(R.id.btn_five).setOnClickListener(this);findViewById(R.id.btn_six).setOnClickListener(this);findViewById(R.id.btn_seven).setOnClickListener(this);findViewById(R.id.btn_eight).setOnClickListener(this);findViewById(R.id.btn_nine).setOnClickListener(this);}@Overridepublic void onClick(View view) {String inputText = "";//处理图片按钮if (view.getId() == R.id.btn_radical) {inputText = "#";} else {inputText = ((Button) view).getText().toString();}switch (view.getId()) {//清空按钮case R.id.btn_ce:initZero();break;//回退按钮case R.id.btn_back:clear();break;//四则运算符case R.id.btn_plus:case R.id.btn_minus:case R.id.btn_divide:case R.id.btn_multi:operator = inputText;show(showText + operator);break;//求导数case R.id.btn_fraction:result = String.valueOf(getFraction());//刷新结果refreshRes(result);//显示show(showText + "/=" +result);break;//求开方case R.id.btn_radical:result = String.valueOf(getRadical());//刷新结果refreshRes(result);//显示show(showText + "/=" +result);break;//等号case R.id.btn_equal:result = String.valueOf(getRes());//刷新结果refreshRes(result);//显示show(showText + "=" +result);break;default://无运算符 则输入数字为第一个数if (operator.equals("")) {firstNum = firstNum + inputText;} else {secondNum = secondNum + inputText;}//判断是否首先输入了0或者小数点if (showText.equals("0") && !inputText.equals(".")) {show(inputText);} else {//显示输入的操作数show(showText + inputText);}break;}}private double getRadical() {return Math.sqrt(Double.parseDouble(firstNum));}private double getFraction() {return 1.0 / Double.parseDouble(firstNum);}private void initZero() {showText = "0";operator = "";firstNum = "";secondNum = "";tv_res.setText(showText);}//清空操作private void clear() {showText = "";operator = "";firstNum = "";secondNum = "";tv_res.setText(showText);}//show inputprivate void show(String text) {showText = text;tv_res.setText(showText);}private double getRes() {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);}}//运行equal后刷新状态private void refreshRes(String new_res) {result = new_res;firstNum=result;secondNum="";operator="";}}

以上代码可实现简易计算器的运算,但存在Bug,但是简单的计算是没问题。


http://www.ppmy.cn/embedded/31230.html

相关文章

docker系列9:容器卷挂载(下)

传送门 docker系列1&#xff1a;docker安装 docker系列2&#xff1a;阿里云镜像加速器 docker系列3&#xff1a;docker镜像基本命令 docker系列4&#xff1a;docker容器基本命令 docker系列5&#xff1a;docker安装nginx docker系列6&#xff1a;docker安装redis docker系…

G1 - 生成对抗网络(GAN)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 理论知识生成器判别器基本原理 环境步骤环境设置数据准备模型设计模型训练模型效果展示 总结与心得体会 理论知识 生成对抗网络&#xff08;Generative …

Sqlmap的使用

Sqlmap URL 检测 sqlmap直接对单一的url探测&#xff0c;参数使用-u或--url payload&#xff1a;sqlmap -u "http://192.168.10.1/sqlilabs/sqli-labs-php7-master/Less-1/?id1" --banner 注意&#xff1a;如果进入这个页面要先登录那么就需要把cookie带上 sqlm…

专业渗透测试 Phpsploit-Framework(PSF)框架软件小白入门教程(二)

本系列课程&#xff0c;将重点讲解Phpsploit-Framework框架软件的基础使用&#xff01; 本文章仅提供学习&#xff0c;切勿将其用于不法手段&#xff01; 继续接上一篇文章内容&#xff0c;讲述如何进行Phpsploit-Framework软件的基础使用和二次开发。 当我们同意许可协议之…

vue2 + antvx6 实现流程图功能

导入关键包 npm install antv/x6 --save npm install antv/x6-vue-shape 保存插件 (可选) npm install --save antv/x6-plugin-clipboard antv/x6-plugin-history antv/x6-plugin-keyboard antv/x6-plugin-selection antv/x6-plugin-snapline antv/x6-plugin-stencil antv/…

千帆起航、芯聚未来——鸿蒙与集成电路产教融合人育人研讨活动成功举办

4月24日&#xff0c;“千帆起航、芯聚未来”——鸿蒙与集成电路产教融合人育人研讨活动在上海顺利举行&#xff0c;本次活动由华为云计算技术有限公司、上海恒驰信息系统有限公司、上海荟诚信息系统有限公司和上海青软晶睿微电子科技有限公司联合举办&#xff0c;汇聚了来自教育…

IP协议的TTL解析(定义、执行、用途)

基本定义 ttl定义的目的是为了让数据包能不要在网上存活太久。为什么呢&#xff1f;最初的原因&#xff1a; 如果出现了路由环路会怎样&#xff1f; 其实也简单&#xff1a; 一个包会在网络里一直转来转去&#xff0c;永远不会被丢弃。网络里会慢慢堆积起垃圾&#xff0c;不断…

Android 官网Ota介绍

构建 OTA 软件包 | Android 开源项目 | Android Open Source Project