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

 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.rhkb.cn/news/318805.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

禄得可转债自定义因子交易系统,年化40%,最大回撤15%

经过2个月的研究&#xff0c;和大佬们讨论轮动算法&#xff0c;选股算法&#xff0c;终于完成了可转债自定义因子轮动系统&#xff0c;非常感谢禄得老师的数据 文件链接 禄得可转债自定义因子交易系统&#xff0c;年化40%,最大回撤15% (qq.com) 网页 https://lude.cc/ 程序支…

【云原生】Docker 实践(四):使用 Dockerfile 文件的综合案例

【Docker 实践】系列共包含以下几篇文章&#xff1a; Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用Docker 实践&#xff08;二&#xff09;&#xff1a;什么是 Docker 的镜像Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerf…

【简单介绍下Faiss原理和使用】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

Xamarin.Android项目使用ConstraintLayout约束布局

Xamarin.AndroidX.ConstraintLayout Xamarin.Android.Support.Constraint.Layout Xamarin.AndroidX.ConstraintLayout.Solver Xamarin.AndroidX.DataBinding.ViewBinding Xamarin.AndroidX.Legacy.Support.Core.UI Xamarin.AndroidX.Lifecycle.LiveData ![在这里插入图片描述]…

封装umi-request时通过 AbortController 配置取消请求

一、关键部分 一、在封装的request.ts中 声明一个 abortControllers 对象用于存储要取消的请求&#xff08;我用了-s表示复数&#xff0c;多个abortcontroller对象&#xff0c;与下面&#x1f447;的单个abortController区分&#xff09;封装取消请求的函数cancelRequest, 传入…

机器学习:深入解析SVM的核心概念【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂&#xff0c;所以导师直接推荐我阅读周志华的《西瓜书》&#xff01;&#xff01;然后仔细阅读其中的第六章&#xff1a;支持向量机 间隔与支持向量 **问题一&#xff1a;什么叫法向量&#xff1f;为什么是叫法向量**什么是法向量&#xff1f;…

.NET操作 Access (MSAccess)

注意&#xff1a;新项目推荐 Sqlite &#xff0c;Access需要注意的东西太多了&#xff0c;比如OFFICE版本&#xff0c;是X86还是X64 连接字符串 ProviderMicrosoft.ACE.OleDB.15.0;Data Source"GetCurrentProjectPath"\\test.accdb//不同的office版本 连接字符串有…

【Transformer系列(4)】基于vision transformer(ViT)实现猫狗二分类项目实战

文章目录 一、vision transformer&#xff08;ViT&#xff09;结构解释二、Patch Embedding部分2.1 图像Patch化2.2 cls token2.3 位置编码&#xff08;positional embedding&#xff09; 三、Transformer Encoder部分(1) Multi-head Self-Attention(2) encoder block 四、head…

小程序账号设置以及request请求的封装

一般开发在小程序时&#xff0c;都会有测试版和正式版&#xff0c;这样在开发时会比较方便。 在开发时。产品经理都会给到测试账号和正式账号&#xff0c;后端给的接口也都会有测试环境用到的接口和正式环境用到的接口。 这里讲一讲我这边如何去做的。 1.在更目录随便命名一…

langchain+qwen1.5-7b-chat搭建本地RAG系统

概念 检索增强生成(Retrieval Augmented Generation, RAG)是一种结合语言模型和信息检索的技术,用于生成更准确且与上下文相关的输出。 通用模型遇到的问题,也是RAG所擅长的: 知识的局限性: RAG 通过从知识库、数据库、企业内部数据等外部数据源中检索相关信息,将其注…

物联网实战--平台篇之(二)基础搭建

目录 一、Qt工程创建 二、数据库知识 三、通信协议 四、名词定义 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html 一、Qt工程…

nginx--压缩https证书favicon.iconginx隐藏版本号 去掉nginxopenSSL

压缩功能 简介 Nginx⽀持对指定类型的⽂件进行压缩然后再传输给客户端&#xff0c;而且压缩还可以设置压缩比例&#xff0c;压缩后的文件大小将比源文件显著变小&#xff0c;这样有助于降低出口带宽的利用率&#xff0c;降低企业的IT支出&#xff0c;不过会占用相应的CPU资源…

VTK —— 二、教程六 - 为模型加入3D微件(按下i键隐藏或显示)(附完整源码)

代码效果 本代码编译运行均在如下链接文章生成的库执行成功&#xff0c;若无VTK库则请先参考如下链接编译vtk源码&#xff1a; VTK —— 一、Windows10下编译VTK源码&#xff0c;并用Vs2017代码测试&#xff08;附编译流程、附编译好的库、vtk测试源码&#xff09; 教程描述 本…

运维笔记:基于阿里云跨地域服务器通信(上)

运维笔记 阿里云&#xff1a;跨地域服务器通信&#xff08;上&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this a…

算法打卡day40

今日任务&#xff1a; 1&#xff09;139.单词拆分 2&#xff09;多重背包理论基础&#xff08;卡码网56携带矿石资源&#xff09; 3&#xff09;背包问题总结 4&#xff09;复习day15 139单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; …

【Node.js工程师养成计划】之express框架

一、Express 官网&#xff1a;http://www.expressjs.com.cn express 是一个基于内置核心 http 模块的&#xff0c;一个第三方的包&#xff0c;专注于 web 服务器的构建。 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用&…

网络安全知识点

网络安全 1&#xff0e; 网络安全的定义&#xff0c;网络安全的属性。 定义&#xff1a;针对各种网络安全威胁研究其安全策略和机制&#xff0c;通过防护、检测和响应&#xff0c;确保网络系统及数据的安全性。 属性&#xff1a;机密性 认证&#xff08;可鉴别性&#xff09…

【Leetcode每日一题】 分治 - 排序数组(难度⭐⭐)(69)

1. 题目解析 题目链接&#xff1a;912. 排序数组 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 归并排序&#xff08;Merge Sort&#xff09;是一种采用“分而治之”&#xff08;Divide and Conquer&#xff09;策略…

解决RTC内核驱动的问题bm8563

常用pcf-8563 , 国产平替BM8563(驱动管脚一致)&#xff1b; 实时时钟是很常用的一个外设&#xff0c;通过实时时钟我们就可以知道年、月、日和时间等信息。 因此在需要记录时间的场合就需要实时时钟&#xff0c;可以使用专用的实时时钟芯片来完成此功能 RTC 设备驱动是一个标准…

【webrtc】MessageHandler 4: 基于线程的消息处理:以Fake 收发包模拟为例

G:\CDN\rtcCli\m98\src\media\base\fake_network_interface.h// Fake NetworkInterface that sends/receives RTP/RTCP packets.虚假的网络接口,用于模拟发送包、接收包单纯仅是处理一个ST_RTP包 消息的id就是ST_RTP 类型,– 然后给到目的地:mediachannel处理: 最后消息消…