Implémentation de la calculatrice Android

1. Aperçu du projet

Ce projet est une application de calculatrice simple qui peut exécuter les fonctions de base d'une calculatrice telles que l'addition, la soustraction, la multiplication et la division. Nous utiliserons Android Studio comme outil de développement.

2. Conception du projet

1. Créez un nouveau projet Android dans Android Studio.
2. Dans le fichier de mise en page (`activity_main.xml`), nous ajouterons un bouton et une vue texte pour afficher les résultats.
3. Dans le fichier de code (`MainActivity.java`), nous traiterons la saisie de l'utilisateur et afficherons les résultats du calcul.

3. Développement de projet

1. Fichier de mise en page

Implémentez l'effet de page frontale dans le fichier de mise en page `activity_main.xml`. Utilisez des composants tels que « EditText » pour saisir des procédures et des résultats, et « Button » pour effectuer des calculs.

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="top"
        android:columnCount="1"
        android:orientation="vertical"
        android:rowCount="2">

        <EditText
            android:id="@+id/mresult"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:enabled="false"
            android:hint="这里显示结果"
            android:textColor="@color/black" />


        <EditText
            android:id="@+id/mjsgc"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:hint="这里显示计算过程" />
    </GridLayout>

    <GridLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center|top"
        android:orientation="horizontal"

        android:columnCount="4"
        android:rowCount="5"
        >

        <Button
            android:id="@+id/btnqc"
            android:layout_width="180dp"
            android:layout_height="60dp"
            android:layout_columnSpan="2"
            android:text="C" />

        <Button
            android:id="@+id/btndel"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:layout_columnSpan="1"
            android:text="del" />

        <Button
            android:id="@+id/btnc"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="/" />

        <Button
            android:id="@+id/btn7"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="7" />

        <Button
            android:id="@+id/btn8"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="8" />

        <Button
            android:id="@+id/btn9"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="9" />

        <Button
            android:id="@+id/btnx"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="*" />


        <Button
            android:id="@+id/btn4"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="4" />

        <Button
            android:id="@+id/btn5"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="5" />

        <Button
            android:id="@+id/btn6"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="6" />

        <Button
            android:id="@+id/btnj"
            android:layout_width="90dp"
            android:layout_height="63dp"
            android:text="-" />

        <Button
            android:id="@+id/btn1"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="1" />

        <Button
            android:id="@+id/btn2"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="2" />

        <Button
            android:id="@+id/btn3"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="3" />


        <Button
            android:id="@+id/btn1j"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:layout_rowSpan="1"
            android:text="+" />

        <Button
            android:id="@+id/zhengfu"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="预留" />

        <Button
            android:id="@+id/btn0"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:layout_columnSpan="1"
            android:text="0" />

        <Button
            android:id="@+id/btnd"
            android:layout_width="wrap_content"
            android:layout_height="60dp"
            android:text="." />


        <Button
            android:id="@+id/btn1d"
            android:layout_width="90dp"
            android:layout_height="60dp"
            android:text="=" />

        <Space />
    </GridLayout>

</GridLayout>

Disposition GridLayout : si vous souhaitez obtenir l'effet de mise en page de la fusion de lignes, l'utilisation de la mise en page GridLayout est le moyen le plus simple et le plus simple d'y parvenir.

Attributs communs : android:orientation définit l'affichage horizontal ou vertical        android:columnCount définit le nombre de colonnes android:rowCount définit le nombre de lignes

Attributs de contrôle enfant : Android : layout_rowSpan fusionne plusieurs colonnes verticalement sur   Android : layout_columSpan fusionne plusieurs lignes horizontalement        Android : layout_gravity La position du composant parent

 L'image ci-dessus est l'effet de la page d'accueil

2. Fichiers de codes

Dans le fichier de code « MainActivity.java », nous ajouterons un écouteur d'événement de clic pour le bouton, traiterons les entrées de l'utilisateur et afficherons les résultats du calcul.

package com.example.a4_11;


import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    //显式结果和计算过程
    private EditText mresult, mjsgc;
    //数字0-9
    private Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0;
    private Button btnd; //小数点
    //运算符
    private Button btn1j, btnj, btnx, btnc, btn1d; //加减乘除等于

    //功能键
    private Button btndel, btnqc;//回退键和清除所有键
    boolean equals_flag = false;//等号标识

    boolean del_flag = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //数字0-9
        btn1 = findViewById(R.id.btn1);
        btn2 = findViewById(R.id.btn2);
        btn3 = findViewById(R.id.btn3);
        btn4 = findViewById(R.id.btn4);
        btn5 = findViewById(R.id.btn5);
        btn6 = findViewById(R.id.btn6);
        btn7 = findViewById(R.id.btn7);
        btn8 = findViewById(R.id.btn8);
        btn9 = findViewById(R.id.btn9);
        btn0 = findViewById(R.id.btn0);
        //运算符
        btn1j = findViewById(R.id.btn1j);// +
        btnj = findViewById(R.id.btnj);// -
        btnx = findViewById(R.id.btnx);// *
        btnc = findViewById(R.id.btnc); // /
        btnd = findViewById(R.id.btnd);//小数点
        btn1d = findViewById(R.id.btn1d);// =

        btndel = findViewById(R.id.btndel);//退回
        btnqc = findViewById(R.id.btnqc);//清除

        mresult = findViewById(R.id.mresult);//结果框
        mjsgc = findViewById(R.id.mjsgc);//输入过程框

        //点击事件0-9
        btn0.setOnClickListener(this);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
        btn5.setOnClickListener(this);
        btn6.setOnClickListener(this);
        btn7.setOnClickListener(this);
        btn8.setOnClickListener(this);
        btn9.setOnClickListener(this);
        btnd.setOnClickListener(this);
        //点击事件运算符
        btn1j.setOnClickListener(this);
        btnj.setOnClickListener(this);
        btnx.setOnClickListener(this);
        btnc.setOnClickListener(this);
        btn1d.setOnClickListener(this);

        btndel.setOnClickListener(this);
        btnqc.setOnClickListener(this);
    }

    //读取每个按钮的点击的内容
    @Override
    public void onClick(View v) {
        //获取输入框和结果框的内容
        String input = mjsgc.getText().toString();
        String output = mresult.getText().toString();
        switch (v.getId()) {
            case R.id.btn0:
            case R.id.btn1:
            case R.id.btn2:
            case R.id.btn3:
            case R.id.btn4:
            case R.id.btn5:
            case R.id.btn6:
            case R.id.btn7:
            case R.id.btn8:
            case R.id.btn9:
            case R.id.btnd:
                if (equals_flag) {
                    //按过等号之后,重新点数字们
                    equals_flag = false;
                    mjsgc.setText(((Button) v).getText());
                    mresult.setText(((Button) v).getText());
                } else {
                    mjsgc.setText(input + ((Button) v).getText());
                    mresult.setText(((Button) v).getText());
                }
                break;
            case R.id.btn1j:
            case R.id.btnj:
            case R.id.btnx:
            case R.id.btnc:
                if (equals_flag) {
                    //按过等号之后,重新点数字
                    equals_flag = false;
                    mjsgc.setText(output + " " + ((Button) v).getText() + " ");
                } else {
                    mjsgc.setText(input + " " + ((Button) v).getText() + " ");
                }
                break;
            case R.id.btndel:
                equals_flag = false;
                if (input.length() > 0) {//如果获取到的内容不为空
                    mjsgc.setText(input.substring(0, input.length() - 1));
                } else {
                    mresult.setText(null);
                    mjsgc.setText(null);
                }
                break;
            case R.id.btnqc:
                mresult.setText(null);
                mjsgc.setText(null);
                break;
            case R.id.btn1d://运算结果  =
                getResult();//调用处理结果集的方法
                break;
        }
    }

    //运算结果的方法
    public void getResult() {
        try {
            String JSGC = mjsgc.getText().toString();//获取计算过程文本框的内容
            double dResult = 0;
            int iResult = 0;

            //如果直接点等号
            if (JSGC.equals("") || JSGC == null) {
                return;
            }
            if (equals_flag) {
                equals_flag = false;
                return;
            }
            equals_flag = true;//点击过等号之后,标识亮起

            String s1, s2, op;

            //运算符前的数字
            s1 = JSGC.substring(0, JSGC.indexOf(" "));
            //运算符
            op = JSGC.substring(JSGC.indexOf(" ") + 1, JSGC.indexOf(" ") + 2);
            //运算符后的数字
            s2 = JSGC.substring(JSGC.indexOf(" ") + 3);

            double d1, d2;
            //s1转化成double型
            if (!s1.equals("")) {
                if (s1.charAt(0) == '.') {
                    s1 = "0" + s1;//如果简写小数(如0.03简写.03,需要帮它完整输出数字)
                }
                d1 = Double.parseDouble(s1);//正常转化
            } else {
                d1 = 0;//如果首次只输入了“运算符 数字”,如: + 4,则返回:0 + 4
                mjsgc.setText("0" + JSGC);
            }

            //s2转化成double型
            if (!s2.equals("")) {
                if (s2.charAt(0) == '.') {
                    s2 = "0" + s2;
                }
                d2 = Double.parseDouble(s2);
            } else {
                d2 = d1;
                if (s1.equals("")) {
                    mjsgc.setText("0" + JSGC + "0");//如果只输入了运算符,如 + ,输出0 + 0,得结果0
                } else {
                    mjsgc.setText(JSGC + s1);//如果不输入s2,如,9 * ,输出9 * 9 ,得结果81
                }
            }


            if (op.equals("+")) {//如果是 +
                dResult = d1 + d2;
            } else if (op.equals("-")) {
                dResult = d1 - d2;
            } else if (op.equals("*")) {
                dResult = d1 * d2;
            } else if (op.equals("/")) {
                if (d2 == 0) { //如果被除数是0
                    Toast.makeText(this, "除数不能为0", Toast.LENGTH_SHORT).show();
                    return;
                } else {//否则执行正常是除法运算
                    dResult = d1 / d2;
                }
            }


            if (s1.contains(".") || s2.contains(".") || op.equals("/")) {
                mresult.setText(dResult + "");//如果是小数、或者除法运算
            } else {
                iResult = (int) dResult; //否则都是整型
                mresult.setText(iResult + "");
            }

        } catch (Exception e) {
            Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
            Log.i("JSQ", e.toString());
        }

    }
}

3. Exécutez le projet

Cliquez sur le bouton Exécuter pour exécuter avec succès.

Rendus d'opération 

3. Expérience

1. Comprendre la conception de la mise en page

Comprendre comment concevoir et mettre en œuvre une interface utilisateur de calculatrice est une étape importante. Je dois réfléchir à la manière de placer divers contrôles (comme les zones de texte, les boutons, etc.) sur l'écran pour la meilleure expérience utilisateur.

2. Comprendre la gestion des événements Android

Lorsque les utilisateurs effectuent des opérations sur la calculatrice (telles que cliquer sur des boutons ou saisir des chiffres), une logique de traitement d'événements correspondante est requise pour répondre à ces opérations. Cela implique de comprendre le mécanisme de gestion des événements d'Android, tels que les événements de clic, les événements d'entrée, etc.

3. Apprentissage et innovation

Développer des calculatrices Android m'a fait comprendre qu'il est nécessaire d'apprendre de nouvelles technologies et de nouvelles connaissances, mais plus important encore, il faut pouvoir appliquer ces connaissances à des problèmes réels et innover. Ce processus m'a donné une nouvelle compréhension de l'apprentissage.

4. Comprendre le stockage de données Android

Dans ce projet, je dois stocker certaines données dans l'application, telles que des nombres et des actions saisies par l'utilisateur. Je dois comprendre comment y parvenir en utilisant la technologie de stockage de données d'Android.

5. Débogage et tests

Pendant le processus de développement, je dois passer beaucoup de temps au débogage et aux tests pour m'assurer que la calculatrice fonctionne correctement et que l'interface utilisateur est conviviale. Cela m'a appris l'importance des tests et comment rédiger des cas de tests efficaces pour trouver et corriger les bugs.

4. Résumé

Dans ce projet, j'ai appris à implémenter la fonction calculatrice dans une application Android. Comment créer et gérer des vues dans Activity. Découvrez comment utiliser les fichiers de mise en page XML pour concevoir et mettre en page des interfaces. Nécessite une familiarité avec divers éléments de mise en page tels que `GridLayout` . Apprenez à utiliser divers composants de l'interface utilisateur pour obtenir une interaction utilisateur. Cela inclut comment utiliser des composants tels que `EditText`, `Button`, `TextView`, etc. pour saisir et afficher du texte. Lors de la mise en œuvre de la fonction calculatrice, vous devez comprendre les règles et les algorithmes de diverses opérations. Cela inclut les principes de base de l'addition, de la soustraction, de la multiplication et de la division, ainsi que la façon de traiter des expressions complexes telles que les nombres à virgule flottante et les parenthèses. Peut maîtriser les concepts de base du développement d’applications Android, notamment les fonctions de mise en page, de gestion des événements et de calcul. Cela constituera une base solide pour un apprentissage ultérieur dans le domaine du développement Android.

Je suppose que tu aimes

Origine blog.csdn.net/m0_72104085/article/details/131307062
conseillé
Classement