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

发布于:2024-05-10 ⋅ 阅读:(22) ⋅ 点赞:(0)

 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">

    <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:layout_marginTop="10dp"
                android:gravity="center"
                android:text="@string/calTitle"
                android:textColor="@color/black"
                android:textSize="17sp" />

            <TextView
                android: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" />

            <GridLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:columnCount="4"
                android:rowCount="5"
                android:layout_marginTop="10dp">
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <ImageButton
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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"
                    />
                <Button
                    android: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;

    @Override
    protected 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);

    }

    @Override
    public 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 input
    private 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,但是简单的计算是没问题。


网站公告

今日签到

点亮在社区的每一天
去签到