赞
踩
首先建立相应视图
这是一个XML布局文件,用于创建登录界面。下面是每个组件的详细注释:
ConstraintLayout:布局的根容器,用于在界面中定位和约束视图。
TextView:显示“登录界面”文本,位于界面顶部。
Button(id为button):登录按钮,点击后将触发登录操作。
Button(id为button2):退出按钮,点击后将关闭当前活动。
EditText(id为editTextTextPersonName2):用户名输入框,用户可以在此输入用户名。
EditText(id为editTextTextPersonName3):密码输入框,用户可以在此输入密码。
RadioGroup(id为radioGroup2):单选按钮组,用于容纳两个RadioButton。注意:在您提供的代码中,这些单选按钮没有实际用途。
a. RadioButton(id为radioButton2):显示“保存密码”的单选按钮。
b. RadioButton(id为radioButton):显示“RadioButton”的单选按钮,此处应该有一个描述性的文本,如“记住我”。
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; } }
这一部分代码完成了计算器的主要功能,包括按钮的点击事件监听器设置以及各个运算符的执行逻辑。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。