AndroidStudio设计一个计算器

news2025/1/11 7:42:44

界面设计

 

activity_calcuator.xml 设计:

<?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="#EEEEEE"
    android:orientation ="vertical"
    android:padding="5dp">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="@string/simple_calculator"
                android:textColor="@color/black"
                android:textSize="20sp" />

            <TextView
                android:id="@+id/tv_result"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/white"
                android:gravity="right|bottom"
                android:lines="3"
                android:text="0"
                android:textColor="@color/black"
                android:textSize="25sp" />

            <GridLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:columnCount="4"
                android:rowCount="5">

                <Button
                    android:id="@+id/btn_cancel"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="@string/cancel"
                    android:textColor="@color/black"
                    android:textSize="@dimen/button_font_size" />

                <Button
                    android:id="@+id/btn_divide"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="➗"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_multiply"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="x"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_clear"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="C"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_seven"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="7"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_eight"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="8"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_nine"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="9"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_plus"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="+"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_four"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="4"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_five"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="5"
                    android:textColor="@color/black"
                    android:textSize="30sp" />
                <Button
                    android:id="@+id/btn_six"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="6"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_minus"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="-"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_one"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="1"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_two"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="2"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <Button
                    android:id="@+id/btn_three"
                    android:layout_width="0dp"
                    android:layout_height="75dp"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="3"
                    android:textColor="@color/black"
                    android:textSize="30sp" />

                <ImageButton
                    android:id="@+id/ib_sqrt"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/button_height"
                    android:layout_columnWeight="1"
                    android:scaleType="centerInside"
                    android:src="@drawable/sqtr" />

                <Button
                    android:id="@+id/btn_reciprocal"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/button_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="@string/reciprocal"
                    android:textColor="@color/black"
                    android:textSize="@dimen/button_font_size" />

                <Button
                    android:id="@+id/btn_zero"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/button_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="@string/zero"
                    android:textColor="@color/black"
                    android:textSize="@dimen/button_font_size" />

                <Button
                    android:id="@+id/btn_dot"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/button_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="@string/dot"
                    android:textColor="@color/black"
                    android:textSize="@dimen/button_font_size" />

                <Button
                    android:id="@+id/btn_equal"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/button_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:text="@string/equal"
                    android:textColor="@color/black"
                    android:textSize="@dimen/button_font_size" />

            </GridLayout>

        </LinearLayout>

    </ScrollView>

</LinearLayout>

 

dimens.xml

<resources>
    <dimen name="fab_margin">16dp</dimen>

    <dimen name="button_font_size">30sp</dimen>
    <dimen name="button_height">75dp</dimen>
</resources>

 strings.xml

<resources>
    <string name="app_name">chapter03</string>
    <string name="action_settings">Settings</string>
    <!-- Strings used for fragments for navigation -->
    <string name="first_fragment_label">First Fragment</string>
    <string name="second_fragment_label">Second Fragment</string>
    <string name="next">Next</string>
    <string name="previous">Previous</string>

    <string name="hello">你好,世界</string>
    <string name="simple_calculator">牛逼算器</string>
    <string name="cancel">CE</string>
    <string name="divide">➗</string>
    <string name="multiply">x</string>
    <string name="clear">C</string>
    <string name="seven">7</string>
    <string name="eight">8</string>
    <string name="nine">9</string>
    <string name="plus">+</string>
    <string name="four">4</string>
    <string name="five">5</string>
    <string name="six">6</string>
    <string name="minus">-</string>
    <string name="one">1</string>
    <string name="two">2</string>
    <string name="three">3</string>
    <string name="reciprocal">1/x</string>
    <string name="zero">0</string>
    <string name="dot">.</string>
    <string name="equal">=</string>
</resources>

CalcuatorActivity.java逻辑代码:
package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;

public class CalcuatorActivity extends AppCompatActivity {

    private TextView tv_result;

    //第一个操作数
    private String firstNum = "";
    //运算符
    private String operator = "";
    //第二个操作数
    private String secondNum = "";
    //当前的计算结果
    private String result = "";
    //显示的文本内容
    private String showText = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("CalcuatorActiviy","onCreat() method called");
        setContentView(R.layout.activity_calcuator);

        //从布局中获取名交tv_result的文本视图
        tv_result = findViewById(R.id.tv_result);
        //下面每个按钮控件都组册了点击监听
        findViewById(R.id.btn_cancel).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_divide).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_multiply).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_clear).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_seven).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_eight).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_nine).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_plus).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_four).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_five).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_six).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_minus).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_one).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_two).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_three).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_reciprocal).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_zero).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_dot).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.btn_equal).setOnClickListener((View.OnClickListener) this);
        findViewById(R.id.ib_sqrt).setOnClickListener((View.OnClickListener) this);
    }

    //@Override
    public void onClick(View v){
        String inputText;
        //如果是开根号按钮
        if(v.getId() == R.id.ib_sqrt){
            inputText = "√";
        }else{
            //除了开根号之外的其他按钮
            inputText = ((TextView) v).getText().toString();
        }
        switch(v.getId()){
            //点击了清除按钮
            case R.id.btn_clear:
                clear();
                break;
            //点击了取消按钮
            case R.id.btn_cancel:
                break;
            //点击了加减乘除
            case R.id.btn_plus:
            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);
            // 开根号按钮
            case R.id.ib_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_result = 1.0/Double.parseDouble(firstNum);
                refreshOperate(String.valueOf(reciprocal_result));
                refreshText(showText + "/=" + result);
                break;
            default:
                //上次结果已经出来了
                if(result.length()>0&&operator.equals("")){
                    clear();
                }

                //无运算符,则继续拼接第一个操作数
                if(operator.equals("")){
                    firstNum = firstNum + inputText;
                }else{
                //有运算符,则继续拼接第二个操作符
                    secondNum = secondNum + inputText;
                }
                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 "8":
                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 = "";
    }

    //刷新文本显示
    private void refreshText(String text){
        showText = text;
        tv_result.setText(showText);
    }

}

这完全是前端的领域我觉得

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/787266.html

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

相关文章

处理json 和HttpMessageConverterT

文章目录 简单处理json 和HttpMessageConverter<T>处理JSON-ResponseBody应用案例完成示意图代码应用 处理JSON-RequestBody应用案例说明代码实现 处理JSON-注意事项和细节应用实例:小结 HttpMessageConverter<T>基本说明工作机制简图处理JSON-底层实现(HttpMessag…

区块链挖矿的机制原理解析

什么是区块链挖矿&#xff1f; 全球大概有10亿台电脑随时保持运行的状态&#xff0c;但是它们的利用率只有20%&#xff0c;剩余的80%时间都在闲置状态&#xff0c;如果让它们成为云计算节点&#xff0c;在闲暇之余也能成为挖矿机&#xff0c;主人也可以无形中得到一份额外收益…

Ansys Zemax | 设计衍射光学元件(DOE)和超透镜(metalens)

在这篇文章中&#xff0c;我们简要介绍了使用 OpticStudio 设计衍射光学元件&#xff08;DOE&#xff09;和超透镜&#xff08;metalens&#xff09;的过程。我们讨论了相位面和局部光栅的概念。附件中还提供了一些有用的DLLs&#xff0c;以支持特殊的 DOE 或 metalens 设计方法…

windows C++多线程同步<2>-事件

windows C多线程同步&#xff1c;2&#xff1e;-事件 事件对象和关键代码段不同&#xff0c;它是属于内核对象&#xff1b;又分为人工重置事件对象和自动重置事件对象&#xff1b; 同一个线程不允许在不释放事件的情况下多次获取事件&#xff1b; 相关API 白话来讲&#xff1…

尚硅谷大数据项目《在线教育之采集系统》笔记001

视频地址&#xff1a;尚硅谷大数据项目《在线教育之采集系统》_哔哩哔哩_bilibili 目录 P004 P006 P007 P009 P010 P017 P025 P026 P027 P028 P030 P004 将数据以图形图表的方式展示出来&#xff01; P006 数据埋点 所谓埋点就是在应用中特定的流程收集一些信息&…

【Linux命令200例】cksum用于计算文件的校验和

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

[SSM]Spring IoC注解式开发

目录 十二、Spring IoC注解式开发 12.1回顾注解 12.1.1自定义注解 12.1.2使用注解 12.1.3通过反射机制读取注解 12.2声明Bean的注解 12.3Spring注解的使用 12.4选择性实例化Bean 12.5负责注入的注解 12.5.1Value 12.5.2Autowired与Qualifier 12.5.3Resource 12.6全…

Maven发布中央仓库始终报403

把域名 oss.sonatype.org 全部替换为&#xff1a;s01.oss.sonatype.org

Spring Cloud【SkyWalking服务环境搭建、微服务接入SkyWalking探针、Docker搭建Elasticsearch环境 】(十四)

目录 分布式请求链路追踪_SkyWalking服务环境搭建 分布式请求链路追踪_微服务接入SkyWalking探针 分布式请求链路追踪_Docker搭建Elasticsearch环境 分布式请求链路追踪_SkyWalking使用Elasticsearch持久化 分布式请求链路追踪_SkyWalking自定义链路追踪 分布式请求链路…

疲劳驾驶检测和识别3:Android实现疲劳驾驶检测和识别(含源码,可实时检测)

疲劳驾驶检测和识别3&#xff1a;Android实现疲劳驾驶检测和识别(含源码&#xff0c;可实时检测) 目录 疲劳驾驶检测和识别3&#xff1a;Android实现疲劳驾驶检测和识别(含源码&#xff0c;可实时检测) 1.疲劳驾驶检测和识别方法 2.人脸检测方法 3.疲劳驾驶检测和识别模型…

24 鼠标常用事件

鼠标进入&#xff1a;enterEvent鼠标离开&#xff1a;leaveEvent鼠标按下&#xff1a;mousePressEvent鼠标释放&#xff1a;mouseRelaseEvent鼠标移动&#xff1a;mouseMoveEvent 提升为自定义控件MyLabel 代码&#xff1a; //mylabel.h #ifndef MYLABEL_H #define MYLABEL_H#…

linux LVM磁盘管理

Linux运维过程中经常会遇到扩容的场景&#xff0c;下面做一点简单笔记&#xff0c;所谓好记性不如烂笔头。 1、新建磁盘挂载 &#xff08;1&#xff09;先看看主机上有没有挂载磁盘或挂载的磁盘有没有剩余的。 如下图可以看到这台机器挂了两个盘&#xff0c;一个/dev/sda,这…

【项目管理】第三节:PMP备考学习建议

文章目录 1.项目管理的价值观与方法论2.PMP开始的形式和题型 1.项目管理的价值观与方法论 对于中国考生而言&#xff0c;PMP”考试有两关要过:第一关是认知升级&#xff0c;考生通过学习和梳理项目管理知识&#xff0c;提升自己对项目管理的认知;第二关是思维升级&#xff0c;…

【Vue3】Vue3中的组合式API是什么?hook是什么?什么是“组合式函数”?项目中如何使用自定义 hook 函数?

组合式API与hook 一、什么是组合式 API&#xff1f;&#xff08;composition-api&#xff09;二、什么是组合式函数&#xff1f;&#xff08;hook&#xff09;2.1 无状态的函数&#xff08;utils&#xff09;2.2 有状态的函数&#xff08;hooks&#xff09;2.3 utils与hooks的联…

yolov5s模型剪枝详细过程(v6.0)

本文参考github上大神的开源剪枝项目进行学习与分享&#xff0c;具体链接放在文后&#xff0c;希望与大家多多交流&#xff01; 一、原模型训练 在官方源码上训练yolov5模型&#xff0c;支持v6.0分支的n/s/m/l模型&#xff0c;我这里使用的是v5s&#xff0c;得到后将项目clone到…

Cesium态势标绘专题-椭圆(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

图像处理之Hough变换检测直线

hough变换-直线检测 一、 前言二、Hough 变换三、直线检测四、代码实现1.hough检测2.画直线代码3.画hough空间代码4.检测结果 一、 前言 霍夫变换是一种特征检测(feature extraction)&#xff0c;被广泛应用在图像分析&#xff08;image analysis&#xff09;、计算机视觉(com…

[算法通关村] 1.2 链表的插入

上一节我们谈到了链表的概念&#xff0c;以及链表的创建方法&#xff0c;忘记的小伙伴可以复习一下&#xff1a; [算法通关村] 1.1 单向链表的创建 今天我们来探究一下链表的插入&#xff0c;链表的插入共有 3 种可能性&#xff0c;分别是在链表的头部插入、在中间插入&#x…

CMake学习-All in one

参考引用 CMake与Make最简单直接的区别通过例子学习CMakeLIO-SAM 1. 引言 1.1 什么是 CMake 1.1.1 CMake 背景 1.1.2 CMake 定义 CMake 是一个跨平台的安装&#xff08;编译&#xff09;工具&#xff0c;可以用简单的语句来描述所有平台的安装&#xff08;编译&#xff09;过…

基础算法-数组模拟队列

队列&#xff1a;先进先出 什么叫做队列&#xff1a; 就是一个特殊的数组。这个数组&#xff0c;最前面叫队头&#xff0c;最后面叫队尾。只允许在最后面添加元素&#xff0c;只允许在最前面删除元素。 解题思路&#xff1a; 用一个数组 q 保存数据。 用 hh 代表队头&…