【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.mzph.cn/web/6234.shtml

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

相关文章

发卡授权盗u系统源码ZHU

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包去除后门板&#xff0c; 搭建系统TGaqxm01&#xff0c;最好是部署智能合约后用合约地址来授权包含转账支付页面盗U授权源码。 完美提U&#xff0c;教程包含如何提u 。功能完美。 1.Php静态 2.目录puicta 3.扩sal 4.s…

Spring Boot中使用Redis和Lua脚本实现延时队列

码到三十五 &#xff1a; 个人主页 延时队列是一种常见的需求。延时队列允许我们延迟处理某些任务&#xff0c;这在处理需要等待一段时间后才能执行的操作时特别有用&#xff0c;如发送提醒、定时任务等。文中&#xff0c;将介绍如何在Spring Boot环境下使用Redis和Lua脚本来实…

吴恩达机器学习笔记 三十七 电影推荐系统 使用特征 成本函数 协同过滤算法

以电影评分系统为例&#xff0c;令 r(i, j) 来表示用户 j 已经对电影 i 评分&#xff0c; y&#xff08;i, j&#xff09;表示评分具体是多少。 假如每部电影有自己的特征&#xff0c;那么用户 j 对电影 i 的评分预测为 w(j) * x(i) b(j) r(i, j) &#xff1a;一个用户 j 是否…

global IoT SIM解决方案

有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题&#xff0c;欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot). Onomondo提供的全球IoT SIM卡解决方案具有以下特点和优势&#xff1a; 1. **单一全球配置文件**&#xff1a;Onomondo的SIM卡拥…

Flink checkpoint 源码分析- Checkpoint barrier 传递源码分析

背景 在上一篇的博客里&#xff0c;大致介绍了flink checkpoint中的触发的大体流程&#xff0c;现在介绍一下触发之后下游的算子是如何做snapshot。 上一篇的文章: Flink checkpoint 源码分析- Flink Checkpoint 触发流程分析-CSDN博客 代码分析 1. 在SubtaskCheckpointCoo…

Vue3+ts(day05:ref、props、生命周期、hook)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/frontlearningNotes 觉得有帮助的同学&#xff0c;可以点心心支持一下哈&#xff08;笔记是根据b站上学习的尚硅谷的前端视频【张天禹老师】&#xff0c;记录一下学习笔记&#xff0c;用于自己复盘&#xff0c;有需要学…

开源AI智能名片S2B2C商城系统:移动技术的深度整合与应用

在数字化营销的新时代&#xff0c;开源AI智能名片S2B2C商城系统通过深度整合移动技术MAC ID、Beacon和DSP&#xff0c;为企业带来了前所未有的营销机遇。这一系统不仅提高了营销效率&#xff0c;还极大地提升了客户体验&#xff0c;并有效降低了营销成本。下面&#xff0c;我们…

【JAVA基础之反射】反射详解

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 1.反射 1.1 概述 是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b; 对于任意一个对象&#xff0c;都能够调用它…

SQL注入漏洞扫描---sqlmap

what SQLMap是一款先进的自动执行SQL注入的审计工具。当给定一个URL时&#xff0c;SQLMap会执行以下操作&#xff1a; 判断可注入的参数。判断可以用哪种SQL注入技术来注入。识别出目标使用哪种数据库。根据用户的选择&#xff0c;读取哪些数据库中的数据。 更详细语法请参考…

BJFUOJ-C++程序设计-实验3-继承和虚函数

A TableTennisPlayer 答案&#xff1a; #include<iostream> #include<cstring> using namespace std;class TableTennisPlayer{ private:string firstname;string lastname;bool hasTable;public:TableTennisPlayer(const string &, const string &, bool…

leetCode65. 有效数字

leetCode65. 有效数字 题目思路 代码 class Solution { public:bool isNumber(string s) {int l 0, r s.size() - 1;// 1.忽略前后的空格while(l < r && s[l] ) l;while(l < r && s[r] ) r--;if(l > r) return false;s s.substr(l,r - l 1)…

Git的基本操作和使用

git分支指令 列出所有本地分支 git branchmaster是绿的 前面有个 表示当前分支是master* 列出所有远程分支 git branch -r列出所有本地分支和远程分支 git branch -a新建一个分支&#xff0c;但依然停留在当前分支 git branch [branch-name]新建一个分支&#xff0c;并切…

httpcanary抓包某游戏思路及教程[第1期]

游戏介绍&#xff1a; 这期在线读档0花购买教程&#xff0c;存档版教程。下一期在线购买无限鲜花累计充值安卓全系统适配修改教程。 小白勿入&#xff0c;技术流资料 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码&#x…

设计模式动态代理

什么是设计模式? 一个问题通常有n种解法&#xff0c;其中肯定有一种解法是最优的&#xff0c;这个最优的解法被人总结出来了&#xff0c;称之为设计模式。 设计模式有20多种&#xff0c;对应20多种软件开发中会遇到的问题。 关于设计模式的学习&#xff0c;主要学什么&#…

onedrive下載zip檔案有20G限制,如何解決

一般來說&#xff0c;OneDrive網頁版對文件下載大小的限制如下圖所示&#xff0c;更多資訊&#xff0c;請您參考這篇文章&#xff1a;OneDrive 和 SharePoint 中的限制 - Microsoft Support 因此我們推薦您使用OneDrive同步用戶端來同步到本地電腦&#xff0c;您也可以選擇只同…

MFC 列表控件删除实例(源码下载)

1、本程序基于前期我的博客文章《MFC下拉菜单打钩图标存取实例&#xff08;源码下载) 》 2、程序功能选中列表控件某一项&#xff0c;删除按钮由禁止变为可用&#xff0c;点击删除按钮&#xff0c;选中的项将删除。 3、首先在主界面添加一个删除参数按钮。 4、在myDlg.cpp 文件…

巨人网络发布2023年年报:全力拥抱AI浪潮,开启游戏产业新篇章

易采游戏网5月3日消息&#xff0c;国内知名游戏公司巨人网络发布了其2023年度财务报告&#xff0c;报告显示&#xff0c;公司在过去一年中积极拥抱AI技术&#xff0c;实现了业绩的稳步增长&#xff0c;为游戏产业带来了新的活力与机遇。 在报告中&#xff0c;巨人网络详细阐述了…

【C++】STL简介

&#x1f525;个人主页&#xff1a; Forcible Bug Maker &#x1f525;专栏&#xff1a; C 目录 前言什么是STL&#xff1f;STL的历史STL的版本STL六大组件STL的优缺点STL的优点&#xff1a;STL的缺点&#xff1a; 如何学习STL结语 前言 本篇博客主要内容&#xff1a;STL简介。…

240503-关于Unity的二三事

240503-关于Unity的二三事 1 常用快捷键 快捷键描述CtrlP播放/停止Ctrl1打开Scene窗口Ctrl2打开Game窗口Ctrl3打开Inspect窗口Ctrl4打开Hierarchy窗口Ctrl5打开Project窗口Ctrl6打开Animation窗口 2 关联VisualStudio2022 3 节约时间&#xff1a;将最新声明的参数移动到最上…

解决wget报错:ERROR 403: Forbidden.

原因&#xff1a; 服务器正在检查引用者&#xff0c;部分 HTTP 请求会得到错误响应。不以 Mozilla 开头或不包含 Wget 的用户代理的请求会被拒绝。 解决方案&#xff1a; wget --user-agent“Mozilla” 要下载的链接 如&#xff1a; wget --user-agent"Mozilla" …