首先建立相应视图

这是一个XML布局文件,用于创建登录界面。下面是每个组件的详细注释:

  1. ConstraintLayout:布局的根容器,用于在界面中定位和约束视图。

  1. TextView:显示“登录界面”文本,位于界面顶部。

  1. Button(id为button):登录按钮,点击后将触发登录操作。

  1. Button(id为button2):退出按钮,点击后将关闭当前活动。

  1. EditText(id为editTextTextPersonName2):用户名输入框,用户可以在此输入用户名。

  1. EditText(id为editTextTextPersonName3):密码输入框,用户可以在此输入密码。

  1. RadioGroup(id为radioGroup2):单选按钮组,用于容纳两个RadioButton。注意:在您提供的代码中,这些单选按钮没有实际用途。

  • a. RadioButton(id为radioButton2):显示“保存密码”的单选按钮。

  • b. RadioButton(id为radioButton):显示“RadioButton”的单选按钮,此处应该有一个描述性的文本,如“记住我”。

  1. CheckBox(id为checkBox):显示“自动登录”的复选框。注意:在您提供的代码中,此复选框没有实际用途。

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:orientation="vertical"
    tools:context=".CalculateActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="登录界面"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.473"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.036" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="72dp"
        android:layout_marginBottom="108dp"
        android:onClick="login"
        android:text="登入"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/radioGroup2"
        app:layout_constraintVertical_bias="0.633" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="退出"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.496"
        app:layout_constraintStart_toEndOf="@+id/button"
        app:layout_constraintTop_toTopOf="@+id/button"
        app:layout_constraintVertical_bias="0.0" />

    <EditText
        android:id="@+id/editTextTextPersonName2"
        android:layout_width="221dp"
        android:layout_height="69dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="zhanghao"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.417"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.09" />

    <EditText
        android:id="@+id/editTextTextPersonName3"
        android:layout_width="215dp"
        android:layout_height="81dp"
        android:ems="10"
        android:inputType="textPersonName"
        android:text="mima"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.408"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName2"
        app:layout_constraintVertical_bias="0.035" />

    <RadioGroup
        android:id="@+id/radioGroup2"
        android:layout_width="131dp"
        android:layout_height="165dp"
        app:layout_constraintStart_toStartOf="@+id/checkBox"
        app:layout_constraintTop_toBottomOf="@+id/checkBox">

        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="113dp"
            android:layout_height="72dp"
            android:layout_marginBottom="32dp"
            android:text="保存密码" />

        <RadioButton
            android:id="@+id/radioButton"
            android:layout_width="wrap_content"
            android:layout_height="61dp"
            android:text="RadioButton" />

    </RadioGroup>

    <CheckBox
        android:id="@+id/checkBox"
        android:layout_width="106dp"
        android:layout_height="72dp"
        android:layout_marginTop="16dp"
        android:text="自动登录"
        app:layout_constraintStart_toStartOf="@+id/editTextTextPersonName3"
        app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName3" />

</androidx.constraintlayout.widget.ConstraintLayout>

编辑相应的Java文件

这是一个简单的登录界面应用程序的MainActivity类,其中包含一些基本组件,如TextView,EditText和Button。以下是关于代码的详细注释:

声明并初始化变量:

textViewTitle: TextView,显示"登录界面"标题。

editTextUsername: EditText,用户名输入框。

editTextPassword: EditText,密码输入框。

buttonLogin: Button,登录按钮。

buttonExit: Button,退出按钮。

在onCreate方法中:

a. 使用setContentView设置布局文件(activity_main4.xml)。

b. 使用findViewById获取布局文件中的组件并将其与相应的变量关联。

c. 定义一个字符串变量user和一个字符串变量password作为登录凭据。在此示例中,我们使用固定的用户名和密码(均为"123")。

为登录按钮设置点击监听器:

a. 获取用户输入的用户名和密码。

b. 检查用户名和密码是否为空,如果为空,则显示一个提示消息(Toast)。

c. 检查输入的用户名和密码是否与预定义的用户名和密码相匹配,如果匹配,则启动新的活动(CalculateActivity),并显示一个登录成功的提示消息。

d. 如果输入的用户名和密码与预定义的用户名和密码不匹配,则显示一个账号或密码错误的提示消息。

为退出按钮设置点击监听器:

a. 调用finish()方法以关闭当前活动(MainActivity)。

这个简单的应用程序允许用户输入用户名和密码,然后点击登录按钮。如果输入的用户名和密码与预定义的用户名和密码相匹配,将进入新的活动(CalculateActivity)。如果用户点击退出按钮,应用程序将关闭。

// 导入所需的包
package com.example.appjisuanqi;

// 导入所需的类
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

// 定义名为MainActivity的类,继承自AppCompatActivity
public class MainActivity extends AppCompatActivity {

    // 声明组件变量
    private TextView textViewTitle;
    private EditText editTextUsername;
    private EditText editTextPassword;
    private Button buttonLogin;
    private Button buttonExit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4); // 设置布局文件

        // 通过ID获取组件并关联变量
        textViewTitle = findViewById(R.id.textView);
        editTextUsername = findViewById(R.id.editTextTextPersonName2);
        editTextPassword = findViewById(R.id.editTextTextPersonName3);
        buttonLogin = findViewById(R.id.button);
        buttonExit = findViewById(R.id.button2);

        // 定义用户名和密码
        String user = "123";
        String password = "123";

        // 设置登录按钮点击监听器
        buttonLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 获取输入的用户名和密码
                String username = editTextUsername.getText().toString();
                String inputPassword = editTextPassword.getText().toString();

                // 检查用户名和密码是否为空
                if (username.isEmpty() || inputPassword.isEmpty()) {
                    Toast.makeText(MainActivity.this, "账号或密码不能为空", Toast.LENGTH_SHORT).show();
                } 
                // 检查输入的用户名和密码是否与预定义的用户名和密码相匹配
                else if (username.equals(user) && inputPassword.equals(password)) {
                    Intent intent = new Intent(MainActivity.this, CalculateActivity.class);
                    startActivity(intent);
                    Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
                } 
                // 如果用户名和密码不匹配,显示错误消息
                else {
                    Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
                }
            }
        });

        // 设置退出按钮点击监听器
        buttonExit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish(); // 关闭当前Activity
            }
        });
    }
}

接下来建立计算器界面

<?xml version="1.0" encoding="utf-8"?>
<!-- XML文件声明,指定版本和编码 -->

<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    <!-- 声明XML命名空间 -->
    xmlns:tools="http://schemas.android.com/tools"
    <!-- 声明工具命名空间 -->
    android:id="@+id/activity_main"
    <!-- 为GridLayout设置ID -->
    android:layout_width="wrap_content"
    <!-- GridLayout宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- GridLayout高度设置为包裹内容 -->
    android:paddingBottom="@dimen/activity_vertical_margin"
    <!-- GridLayout底部内边距 -->
    android:paddingLeft="@dimen/activity_horizontal_margin"
    <!-- GridLayout左侧内边距 -->
    android:paddingRight="@dimen/activity_horizontal_margin"
    <!-- GridLayout右侧内边距 -->
    android:paddingTop="@dimen/activity_vertical_margin"
    <!-- GridLayout顶部内边距 -->
    android:columnCount="4"
    <!-- GridLayout列数设置为4 -->
    android:rowCount="7"
    <!-- GridLayout行数设置为7 -->
    tools:context="com.example.appjisuanqi.CalculateActivity">
    <!-- 设置与此布局关联的Activity -->

   
    
<!-- 显示计算结果的EditText组件 -->
<EditText
        android:id="@+id/et"
        <!-- 为EditText设置ID -->
        android:layout_width="match_parent"
        <!-- EditText宽度设置为匹配父布局 -->
        android:layout_height="wrap_content"
        <!-- EditText高度设置为包裹内容 -->
        android:layout_columnSpan="4"
        <!-- EditText跨越4列 -->
        android:layout_columnWeight="1"
        <!-- EditText列权重设置为1 -->
        android:ems="10"
        <!-- EditText设置为10个字符宽度 -->
        android:gravity="end"
        <!-- EditText内容显示在右侧 -->
        android:hint="@string/app_name"
        <!-- EditText提示文本设置为应用名 -->
        android:text=""
        <!-- EditText的默认文本为空 -->
        android:textSize="40dp" />
        <!-- EditText的文本大小设置为40dp -->

    <!-- 数字按钮和操作按钮 -->
    <!-- 按钮7 -->
    <Button
        android:id="@+id/btn7"
        <!-- 为按钮7设置ID -->
        android:layout_width="wrap_content"
        <!-- 按钮7宽度设置为包裹内容 -->
        android:layout_height="wrap_content"
        <!-- 按钮7高度设置为包裹内容 -->
        android:text="7"
        <!-- 按钮7显示文本为"7" -->
        android:textSize="@dimen/tsize"
        <!-- 按钮7文本大小引用资源文件 -->
        android:layout_margin="5dp" />
        <!-- 按钮7外边距设置为5dp -->

<!-- 按钮8 -->
<Button
    android:id="@+id/btn8"
    <!-- 为按钮8设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮8宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    android:text="8"
    <!-- 按钮8显示文本为"8" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮8文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 按钮8外边距设置为5dp -->


<!-- 按钮9 -->
<Button
    android:id="@+id/btn9"
    <!-- 为按钮9设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮9宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 按钮9高度设置为包裹内容 -->
    android:text="9"
    <!-- 按钮9显示文本为"9" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮9文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 按钮9外边距设置为5dp -->

<!-- 清除按钮 -->
<Button
    android:id="@+id/btnc"
    <!-- 为清除按钮设置ID -->
    android:layout_width="wrap_content"
    <!-- 清除按钮宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 清除按钮高度设置为包裹内容 -->
    android:text="C"
    <!-- 清除按钮显示文本为"C" -->
    android:textSize="@dimen/tsize"
    <!-- 清除按钮文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 清除按钮外边距设置为5dp -->

<!-- 按钮4 -->
<Button
    android:id="@+id/btn4"
    <!-- 为按钮4设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮4宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 按钮4高度设置为包裹内容 -->
    android:text="4"
    <!-- 按钮4显示文本为"4" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮4文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 按钮4外边距设置为5dp -->

<!-- 按钮5 -->
<Button
    android:id="@+id/btn5"
    <!-- 为按钮5设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮5宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 按钮5高度设置为包裹内容 -->
    android:text="5"
    <!-- 按钮5显示文本为"5" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮5文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 按钮5外边距设置为5dp -->

<!-- 按钮6 -->
<Button
    android:id="@+id/btn6"
    <!-- 为按钮6设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮6宽度设置为包裹内容 -->
    android:layout_height="wrap_content
    <!-- 按钮6高度设置为包裹内容 -->
    android:text="6"
    <!-- 按钮6显示文本为"6" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮6文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 按钮6外边距设置为5dp -->

<!-- 除法按钮 -->
<Button
    android:id="@+id/btndiv"
    <!-- 为除法按钮设置ID -->
    android:layout_width="wrap_content"
    <!-- 除法按钮宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 除法按钮高度设置为包裹内容 -->
    android:text="/"
    <!-- 除法按钮显示文本为"/" -->
    android:textSize="@dimen/tsize"
    <!-- 除法按钮文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 除法按钮外边距设置为5dp -->

<!-- 按钮1 -->
<Button
    android:id="@+id/btn1"
    <!-- 为按钮1设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮1宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 按钮1高度设置为包裹内容 -->
    android:text="1"
    <!-- 按钮1显示文本为"1" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮1文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 按钮1外边距设置为5dp -->

<!-- 按钮2 -->
<Button
    android:id="@+id/btn2"
    <!-- 为按钮2设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮2宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 按钮2高度设置为包裹内容 -->
    android:text="2"
    <!-- 按钮2显示文本为"2" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮2文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 按钮2外边距设置为5dp -->

<!-- 按钮3 -->
<Button
    android:id="@+id/btn3"
    <!-- 为按钮3设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮3宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 按钮3高度设置为包裹内容 -->
    android:text="3"
    <!-- 按钮3显示文本为"3" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮3文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 按钮3外边距设置为5dp -->

<!-- 乘法按钮 -->
<Button
    android:id="@+id/btnmul"
    <!-- 为乘法按钮设置ID -->
    android:layout_width="wrap_content"
    <!-- 乘法按钮宽度设置为包裹内容 -->
    android:layout_height
    <!-- 乘法按钮高度设置为包裹内容 -->
    android:text="*"
    <!-- 乘法按钮显示文本为"*" -->
    android:textSize="@dimen/tsize"
    <!-- 乘法按钮文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 乘法按钮外边距设置为5dp -->

<!-- 按钮0 -->
<Button
    android:id="@+id/btn0"
    <!-- 为按钮0设置ID -->
    android:layout_width="wrap_content"
    <!-- 按钮0宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 按钮0高度设置为包裹内容 -->
    android:text="0"
    <!-- 按钮0显示文本为"0" -->
    android:textSize="@dimen/tsize"
    <!-- 按钮0文本大小引用资源文件 -->
    android:layout_columnSpan="2"
    <!-- 按钮0跨越两列 -->
    android:layout_gravity="fill_horizontal"
    <!-- 按钮0水平填充 -->
    android:layout_margin="5dp" />
    <!-- 按钮0外边距设置为5dp -->

<!-- 小数点按钮 -->
<Button
    android:id="@+id/btndot"
    <!-- 为小数点按钮设置ID -->
    android:layout_width="wrap_content"
    <!-- 小数点按钮宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 小数点按钮高度设置为包裹内容 -->
    android:text="."
    <!-- 小数点按钮显示文本为"." -->
    android:textSize="@dimen/tsize"
    <!-- 小数点按钮文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 小数点按钮外边距设置为5dp -->

<!-- 减法按钮 -->
<Button
    android:id="@+id/btnsub"
    <!-- 为减法按钮设置ID -->
    android:layout_width="wrap_content"
    <!-- 减法按钮宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 减法按钮高度设置为包裹内容 -->
    android:text="-"
    <!-- 减法按钮显示文本为"-" -->
    android:textSize="@dimen/tsize"
    <!-- 减法按钮文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 减法按钮外边距设置为5dp -->

<!-- 等于按钮 -->
<Button
    android:id="@+id/btnequ"
    <!-- 为等于按钮设置ID -->
    android:text="="
    <!-- 等于按钮显示文本为"=" -->
    android:layout_width="wrap_content"
    <!-- 等于按钮宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 等于按钮高度设置为包裹内容 -->
    android:layout_columnSpan="3"
    <!-- 等于按钮跨越三列 -->
    android:textSize="@dimen/tsize"
    <!-- 等于按钮文本大小引用资源文件 -->
    android:layout_gravity="fill_horizontal"
    <!-- 等于按钮水平填充 -->
    android:layout_margin="5dp" />
    <!-- 等于按钮外边距设置为5dp -->

<!-- 加法按钮 -->
<Button
    android:id="@+id/btnadd"
    <!-- 为加法按钮设置ID -->
    android:layout_width="wrap_content"
    <!-- 加法按钮宽度设置为包裹内容 -->
    android:layout_height="wrap_content"
    <!-- 加法按钮高度设置为包裹内容 -->
    android:text="+"
    <!-- 加法按钮显示文本为"+" -->
    android:textSize="@dimen/tsize"
    <!-- 加法按钮文本大小引用资源文件 -->
    android:layout_margin="5dp" />
    <!-- 加法按钮外边距设置为5dp -->
</GridLayout>
<!-- GridLayout结束标签,这里结束整个网格布局 -->

这个XML代码片段是一个简单的计算器布局,包含一个输入框(EditText)和一系列按钮。输入框用于显示输入的数字和计算结果,按钮用于输入数字和执行基本的四则运算操作。网格布局被设置为4列和7行,用于容纳所有控件。每个控件的外边距都设置为5dp,以便在按钮之间留有空隙。按钮的文本大小均引用自资源文件。

编辑相应的Java文件

// 声明应用的包名
package com.example.appjisuanqi;

// 导入所需的类
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

// 定义一个名为CalculateActivity的类,该类继承自AppCompatActivity
public class CalculateActivity extends AppCompatActivity {

    // 声明所需的组件变量
    private EditText et;
    private Button btn1;
    private Button btn2;
    private Button btn3;
    private Button btn4;
    private Button btn5;
    private Button btn6;
    private Button btn7;
    private Button btn8;
    private Button btn9;
    private Button btndot, btnadd, btnsub, btnmul, btndiv, btnc, btnequ;

    // 声明计算器需要的变量
    private double num1, num2;
    private char operation;
    private boolean isOperationSelected;

    // 在应用创建时执行的方法
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        // 将布局文件中的组件与变量绑定
        et = findViewById(R.id.et);
        Button btn0 = findViewById(R.id.btn0);
        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);
        btndot = findViewById(R.id.btndot);
        btnadd = findViewById(R.id.btnadd);
        btnsub = findViewById(R.id.btnsub);
        btnmul = findViewById(R.id.btnmul);
        btndiv = findViewById(R.id.btndiv);
        btnc = findViewById(R.id.btnc);
        btnequ = findViewById(R.id.btnequ);

        // 为各个按钮设置点击事件监听器
        // 数字按钮的点击事件
        btn0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                appendNumber("0");
            }
        });
        // ...其他数字按钮的点击事件省略,类似于btn0

        // 小数点按钮的点击事件
        btndot.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                appendNumber(".");
            }
        });

        // 运算符按钮的点击事件
        btnadd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setOperation('+');
            }
        });
        // ...其他运算符按钮的点击事件省略,类似于btnadd

        // 清除按钮的点击事件
        btnc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                et.setText("");
                num1 = 0;
                num2 = 0;
                isOperationSelected = false;
            }
        });

        // 等于按钮的点击事件
        btnequ.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!isOperationSelected) {
                    Toast.makeText(CalculateActivity.this, "请选择操作符", Toast.LENGTH_SHORT).show();
                    return;
                // 如果已选择操作符,尝试执行计算
                try {
                    num2 = Double.parseDouble(et.getText().toString());
                    double result = performOperation();
                    et.setText(String.valueOf(result));
                } catch (NumberFormatException e) {
                    Toast.makeText(CalculateActivity.this, "请输入数字", Toast.LENGTH_SHORT).show();
                }

                isOperationSelected = false;
            }
        });
    }

    // 定义一个方法,用于将数字或小数点添加到显示框中
    private void appendNumber(String num) {
        String currentText = et.getText().toString();
        et.setText(currentText + num);
    }

    // 定义一个方法,用于设置操作符
    private void setOperation(char op) {
        if (!isOperationSelected) {
            try {
                num1 = Double.parseDouble(et.getText().toString());
                operation = op;
                et.setText("");
                isOperationSelected = true;
            } catch (NumberFormatException e) {
                Toast.makeText(this, "请输入数字", Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(this, "操作符已选择", Toast.LENGTH_SHORT).show();
        }
    }

    // 定义一个方法,用于执行运算
    private double performOperation() {
        double result = 0;

        switch (operation) {
            case '+':
                result = num1 + num2;
                break;
            case '-':
                result = num1 - num2;
                break;
            case '*':
                result = num1 * num2;
                break;
            case '/':
                if (num2 != 0) {
                    result = num1 / num2;
                } else {
                    Toast.makeText(this, "除数不能为零", Toast.LENGTH_SHORT).show();
                }
                break;
        }

        return result;
    }
}

                    

这一部分代码完成了计算器的主要功能,包括按钮的点击事件监听器设置以及各个运算符的执行逻辑。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐