当前位置:   article > 正文

Android studio制作简单计算器apk文件_android 自制计算器

android 自制计算器

首先建立相应视图

这是一个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):显示“自动登录”的复选框。注意:在您提供的代码中,此复选框没有实际用途。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:app="http://schemas.android.com/apk/res-auto"
  4. xmlns:tools="http://schemas.android.com/tools"
  5. android:layout_width="match_parent"
  6. android:layout_height="match_parent"
  7. android:orientation="vertical"
  8. tools:context=".CalculateActivity">
  9. <TextView
  10. android:id="@+id/textView"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="登录界面"
  14. app:layout_constraintBottom_toBottomOf="parent"
  15. app:layout_constraintEnd_toEndOf="parent"
  16. app:layout_constraintHorizontal_bias="0.473"
  17. app:layout_constraintStart_toStartOf="parent"
  18. app:layout_constraintTop_toTopOf="parent"
  19. app:layout_constraintVertical_bias="0.036" />
  20. <Button
  21. android:id="@+id/button"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:layout_marginStart="72dp"
  25. android:layout_marginBottom="108dp"
  26. android:onClick="login"
  27. android:text="登入"
  28. app:layout_constraintBottom_toBottomOf="parent"
  29. app:layout_constraintStart_toStartOf="parent"
  30. app:layout_constraintTop_toBottomOf="@+id/radioGroup2"
  31. app:layout_constraintVertical_bias="0.633" />
  32. <Button
  33. android:id="@+id/button2"
  34. android:layout_width="wrap_content"
  35. android:layout_height="wrap_content"
  36. android:text="退出"
  37. app:layout_constraintBottom_toBottomOf="parent"
  38. app:layout_constraintEnd_toEndOf="parent"
  39. app:layout_constraintHorizontal_bias="0.496"
  40. app:layout_constraintStart_toEndOf="@+id/button"
  41. app:layout_constraintTop_toTopOf="@+id/button"
  42. app:layout_constraintVertical_bias="0.0" />
  43. <EditText
  44. android:id="@+id/editTextTextPersonName2"
  45. android:layout_width="221dp"
  46. android:layout_height="69dp"
  47. android:ems="10"
  48. android:inputType="textPersonName"
  49. android:text="zhanghao"
  50. app:layout_constraintBottom_toBottomOf="parent"
  51. app:layout_constraintEnd_toEndOf="parent"
  52. app:layout_constraintHorizontal_bias="0.417"
  53. app:layout_constraintStart_toStartOf="parent"
  54. app:layout_constraintTop_toTopOf="parent"
  55. app:layout_constraintVertical_bias="0.09" />
  56. <EditText
  57. android:id="@+id/editTextTextPersonName3"
  58. android:layout_width="215dp"
  59. android:layout_height="81dp"
  60. android:ems="10"
  61. android:inputType="textPersonName"
  62. android:text="mima"
  63. app:layout_constraintBottom_toBottomOf="parent"
  64. app:layout_constraintEnd_toEndOf="parent"
  65. app:layout_constraintHorizontal_bias="0.408"
  66. app:layout_constraintStart_toStartOf="parent"
  67. app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName2"
  68. app:layout_constraintVertical_bias="0.035" />
  69. <RadioGroup
  70. android:id="@+id/radioGroup2"
  71. android:layout_width="131dp"
  72. android:layout_height="165dp"
  73. app:layout_constraintStart_toStartOf="@+id/checkBox"
  74. app:layout_constraintTop_toBottomOf="@+id/checkBox">
  75. <RadioButton
  76. android:id="@+id/radioButton2"
  77. android:layout_width="113dp"
  78. android:layout_height="72dp"
  79. android:layout_marginBottom="32dp"
  80. android:text="保存密码" />
  81. <RadioButton
  82. android:id="@+id/radioButton"
  83. android:layout_width="wrap_content"
  84. android:layout_height="61dp"
  85. android:text="RadioButton" />
  86. </RadioGroup>
  87. <CheckBox
  88. android:id="@+id/checkBox"
  89. android:layout_width="106dp"
  90. android:layout_height="72dp"
  91. android:layout_marginTop="16dp"
  92. android:text="自动登录"
  93. app:layout_constraintStart_toStartOf="@+id/editTextTextPersonName3"
  94. app:layout_constraintTop_toBottomOf="@+id/editTextTextPersonName3" />
  95. </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)。如果用户点击退出按钮,应用程序将关闭。

  1. // 导入所需的包
  2. package com.example.appjisuanqi;
  3. // 导入所需的类
  4. import androidx.appcompat.app.AppCompatActivity;
  5. import android.content.Intent;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.widget.Button;
  9. import android.widget.EditText;
  10. import android.widget.TextView;
  11. import android.widget.Toast;
  12. // 定义名为MainActivity的类,继承自AppCompatActivity
  13. public class MainActivity extends AppCompatActivity {
  14. // 声明组件变量
  15. private TextView textViewTitle;
  16. private EditText editTextUsername;
  17. private EditText editTextPassword;
  18. private Button buttonLogin;
  19. private Button buttonExit;
  20. @Override
  21. protected void onCreate(Bundle savedInstanceState) {
  22. super.onCreate(savedInstanceState);
  23. setContentView(R.layout.activity_main4); // 设置布局文件
  24. // 通过ID获取组件并关联变量
  25. textViewTitle = findViewById(R.id.textView);
  26. editTextUsername = findViewById(R.id.editTextTextPersonName2);
  27. editTextPassword = findViewById(R.id.editTextTextPersonName3);
  28. buttonLogin = findViewById(R.id.button);
  29. buttonExit = findViewById(R.id.button2);
  30. // 定义用户名和密码
  31. String user = "123";
  32. String password = "123";
  33. // 设置登录按钮点击监听器
  34. buttonLogin.setOnClickListener(new View.OnClickListener() {
  35. @Override
  36. public void onClick(View v) {
  37. // 获取输入的用户名和密码
  38. String username = editTextUsername.getText().toString();
  39. String inputPassword = editTextPassword.getText().toString();
  40. // 检查用户名和密码是否为空
  41. if (username.isEmpty() || inputPassword.isEmpty()) {
  42. Toast.makeText(MainActivity.this, "账号或密码不能为空", Toast.LENGTH_SHORT).show();
  43. }
  44. // 检查输入的用户名和密码是否与预定义的用户名和密码相匹配
  45. else if (username.equals(user) && inputPassword.equals(password)) {
  46. Intent intent = new Intent(MainActivity.this, CalculateActivity.class);
  47. startActivity(intent);
  48. Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
  49. }
  50. // 如果用户名和密码不匹配,显示错误消息
  51. else {
  52. Toast.makeText(MainActivity.this, "账号或密码错误", Toast.LENGTH_SHORT).show();
  53. }
  54. }
  55. });
  56. // 设置退出按钮点击监听器
  57. buttonExit.setOnClickListener(new View.OnClickListener() {
  58. @Override
  59. public void onClick(View v) {
  60. finish(); // 关闭当前Activity
  61. }
  62. });
  63. }
  64. }

接下来建立计算器界面

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- XML文件声明,指定版本和编码 -->
  3. <GridLayout
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. <!-- 声明XML命名空间 -->
  6. xmlns:tools="http://schemas.android.com/tools"
  7. <!-- 声明工具命名空间 -->
  8. android:id="@+id/activity_main"
  9. <!-- 为GridLayout设置ID -->
  10. android:layout_width="wrap_content"
  11. <!-- GridLayout宽度设置为包裹内容 -->
  12. android:layout_height="wrap_content"
  13. <!-- GridLayout高度设置为包裹内容 -->
  14. android:paddingBottom="@dimen/activity_vertical_margin"
  15. <!-- GridLayout底部内边距 -->
  16. android:paddingLeft="@dimen/activity_horizontal_margin"
  17. <!-- GridLayout左侧内边距 -->
  18. android:paddingRight="@dimen/activity_horizontal_margin"
  19. <!-- GridLayout右侧内边距 -->
  20. android:paddingTop="@dimen/activity_vertical_margin"
  21. <!-- GridLayout顶部内边距 -->
  22. android:columnCount="4"
  23. <!-- GridLayout列数设置为4 -->
  24. android:rowCount="7"
  25. <!-- GridLayout行数设置为7 -->
  26. tools:context="com.example.appjisuanqi.CalculateActivity">
  27. <!-- 设置与此布局关联的Activity -->
  1. <!-- 显示计算结果的EditText组件 -->
  2. <EditText
  3. android:id="@+id/et"
  4. <!-- 为EditText设置ID -->
  5. android:layout_width="match_parent"
  6. <!-- EditText宽度设置为匹配父布局 -->
  7. android:layout_height="wrap_content"
  8. <!-- EditText高度设置为包裹内容 -->
  9. android:layout_columnSpan="4"
  10. <!-- EditText跨越4列 -->
  11. android:layout_columnWeight="1"
  12. <!-- EditText列权重设置为1 -->
  13. android:ems="10"
  14. <!-- EditText设置为10个字符宽度 -->
  15. android:gravity="end"
  16. <!-- EditText内容显示在右侧 -->
  17. android:hint="@string/app_name"
  18. <!-- EditText提示文本设置为应用名 -->
  19. android:text=""
  20. <!-- EditText的默认文本为空 -->
  21. android:textSize="40dp" />
  22. <!-- EditText的文本大小设置为40dp -->
  23. <!-- 数字按钮和操作按钮 -->
  24. <!-- 按钮7 -->
  25. <Button
  26. android:id="@+id/btn7"
  27. <!-- 为按钮7设置ID -->
  28. android:layout_width="wrap_content"
  29. <!-- 按钮7宽度设置为包裹内容 -->
  30. android:layout_height="wrap_content"
  31. <!-- 按钮7高度设置为包裹内容 -->
  32. android:text="7"
  33. <!-- 按钮7显示文本为"7" -->
  34. android:textSize="@dimen/tsize"
  35. <!-- 按钮7文本大小引用资源文件 -->
  36. android:layout_margin="5dp" />
  37. <!-- 按钮7外边距设置为5dp -->
  38. <!-- 按钮8 -->
  39. <Button
  40. android:id="@+id/btn8"
  41. <!-- 为按钮8设置ID -->
  42. android:layout_width="wrap_content"
  43. <!-- 按钮8宽度设置为包裹内容 -->
  44. android:layout_height="wrap_content"
  45. android:text="8"
  46. <!-- 按钮8显示文本为"8" -->
  47. android:textSize="@dimen/tsize"
  48. <!-- 按钮8文本大小引用资源文件 -->
  49. android:layout_margin="5dp" />
  50. <!-- 按钮8外边距设置为5dp -->
  51. <!-- 按钮9 -->
  52. <Button
  53. android:id="@+id/btn9"
  54. <!-- 为按钮9设置ID -->
  55. android:layout_width="wrap_content"
  56. <!-- 按钮9宽度设置为包裹内容 -->
  57. android:layout_height="wrap_content"
  58. <!-- 按钮9高度设置为包裹内容 -->
  59. android:text="9"
  60. <!-- 按钮9显示文本为"9" -->
  61. android:textSize="@dimen/tsize"
  62. <!-- 按钮9文本大小引用资源文件 -->
  63. android:layout_margin="5dp" />
  64. <!-- 按钮9外边距设置为5dp -->
  65. <!-- 清除按钮 -->
  66. <Button
  67. android:id="@+id/btnc"
  68. <!-- 为清除按钮设置ID -->
  69. android:layout_width="wrap_content"
  70. <!-- 清除按钮宽度设置为包裹内容 -->
  71. android:layout_height="wrap_content"
  72. <!-- 清除按钮高度设置为包裹内容 -->
  73. android:text="C"
  74. <!-- 清除按钮显示文本为"C" -->
  75. android:textSize="@dimen/tsize"
  76. <!-- 清除按钮文本大小引用资源文件 -->
  77. android:layout_margin="5dp" />
  78. <!-- 清除按钮外边距设置为5dp -->
  79. <!-- 按钮4 -->
  80. <Button
  81. android:id="@+id/btn4"
  82. <!-- 为按钮4设置ID -->
  83. android:layout_width="wrap_content"
  84. <!-- 按钮4宽度设置为包裹内容 -->
  85. android:layout_height="wrap_content"
  86. <!-- 按钮4高度设置为包裹内容 -->
  87. android:text="4"
  88. <!-- 按钮4显示文本为"4" -->
  89. android:textSize="@dimen/tsize"
  90. <!-- 按钮4文本大小引用资源文件 -->
  91. android:layout_margin="5dp" />
  92. <!-- 按钮4外边距设置为5dp -->
  93. <!-- 按钮5 -->
  94. <Button
  95. android:id="@+id/btn5"
  96. <!-- 为按钮5设置ID -->
  97. android:layout_width="wrap_content"
  98. <!-- 按钮5宽度设置为包裹内容 -->
  99. android:layout_height="wrap_content"
  100. <!-- 按钮5高度设置为包裹内容 -->
  101. android:text="5"
  102. <!-- 按钮5显示文本为"5" -->
  103. android:textSize="@dimen/tsize"
  104. <!-- 按钮5文本大小引用资源文件 -->
  105. android:layout_margin="5dp" />
  106. <!-- 按钮5外边距设置为5dp -->
  107. <!-- 按钮6 -->
  108. <Button
  109. android:id="@+id/btn6"
  110. <!-- 为按钮6设置ID -->
  111. android:layout_width="wrap_content"
  112. <!-- 按钮6宽度设置为包裹内容 -->
  113. android:layout_height="wrap_content
  114. <!-- 按钮6高度设置为包裹内容 -->
  115. android:text="6"
  116. <!-- 按钮6显示文本为"6" -->
  117. android:textSize="@dimen/tsize"
  118. <!-- 按钮6文本大小引用资源文件 -->
  119. android:layout_margin="5dp" />
  120. <!-- 按钮6外边距设置为5dp -->
  121. <!-- 除法按钮 -->
  122. <Button
  123. android:id="@+id/btndiv"
  124. <!-- 为除法按钮设置ID -->
  125. android:layout_width="wrap_content"
  126. <!-- 除法按钮宽度设置为包裹内容 -->
  127. android:layout_height="wrap_content"
  128. <!-- 除法按钮高度设置为包裹内容 -->
  129. android:text="/"
  130. <!-- 除法按钮显示文本为"/" -->
  131. android:textSize="@dimen/tsize"
  132. <!-- 除法按钮文本大小引用资源文件 -->
  133. android:layout_margin="5dp" />
  134. <!-- 除法按钮外边距设置为5dp -->
  135. <!-- 按钮1 -->
  136. <Button
  137. android:id="@+id/btn1"
  138. <!-- 为按钮1设置ID -->
  139. android:layout_width="wrap_content"
  140. <!-- 按钮1宽度设置为包裹内容 -->
  141. android:layout_height="wrap_content"
  142. <!-- 按钮1高度设置为包裹内容 -->
  143. android:text="1"
  144. <!-- 按钮1显示文本为"1" -->
  145. android:textSize="@dimen/tsize"
  146. <!-- 按钮1文本大小引用资源文件 -->
  147. android:layout_margin="5dp" />
  148. <!-- 按钮1外边距设置为5dp -->
  149. <!-- 按钮2 -->
  150. <Button
  151. android:id="@+id/btn2"
  152. <!-- 为按钮2设置ID -->
  153. android:layout_width="wrap_content"
  154. <!-- 按钮2宽度设置为包裹内容 -->
  155. android:layout_height="wrap_content"
  156. <!-- 按钮2高度设置为包裹内容 -->
  157. android:text="2"
  158. <!-- 按钮2显示文本为"2" -->
  159. android:textSize="@dimen/tsize"
  160. <!-- 按钮2文本大小引用资源文件 -->
  161. android:layout_margin="5dp" />
  162. <!-- 按钮2外边距设置为5dp -->
  163. <!-- 按钮3 -->
  164. <Button
  165. android:id="@+id/btn3"
  166. <!-- 为按钮3设置ID -->
  167. android:layout_width="wrap_content"
  168. <!-- 按钮3宽度设置为包裹内容 -->
  169. android:layout_height="wrap_content"
  170. <!-- 按钮3高度设置为包裹内容 -->
  171. android:text="3"
  172. <!-- 按钮3显示文本为"3" -->
  173. android:textSize="@dimen/tsize"
  174. <!-- 按钮3文本大小引用资源文件 -->
  175. android:layout_margin="5dp" />
  176. <!-- 按钮3外边距设置为5dp -->
  177. <!-- 乘法按钮 -->
  178. <Button
  179. android:id="@+id/btnmul"
  180. <!-- 为乘法按钮设置ID -->
  181. android:layout_width="wrap_content"
  182. <!-- 乘法按钮宽度设置为包裹内容 -->
  183. android:layout_height
  184. <!-- 乘法按钮高度设置为包裹内容 -->
  185. android:text="*"
  186. <!-- 乘法按钮显示文本为"*" -->
  187. android:textSize="@dimen/tsize"
  188. <!-- 乘法按钮文本大小引用资源文件 -->
  189. android:layout_margin="5dp" />
  190. <!-- 乘法按钮外边距设置为5dp -->
  191. <!-- 按钮0 -->
  192. <Button
  193. android:id="@+id/btn0"
  194. <!-- 为按钮0设置ID -->
  195. android:layout_width="wrap_content"
  196. <!-- 按钮0宽度设置为包裹内容 -->
  197. android:layout_height="wrap_content"
  198. <!-- 按钮0高度设置为包裹内容 -->
  199. android:text="0"
  200. <!-- 按钮0显示文本为"0" -->
  201. android:textSize="@dimen/tsize"
  202. <!-- 按钮0文本大小引用资源文件 -->
  203. android:layout_columnSpan="2"
  204. <!-- 按钮0跨越两列 -->
  205. android:layout_gravity="fill_horizontal"
  206. <!-- 按钮0水平填充 -->
  207. android:layout_margin="5dp" />
  208. <!-- 按钮0外边距设置为5dp -->
  209. <!-- 小数点按钮 -->
  210. <Button
  211. android:id="@+id/btndot"
  212. <!-- 为小数点按钮设置ID -->
  213. android:layout_width="wrap_content"
  214. <!-- 小数点按钮宽度设置为包裹内容 -->
  215. android:layout_height="wrap_content"
  216. <!-- 小数点按钮高度设置为包裹内容 -->
  217. android:text="."
  218. <!-- 小数点按钮显示文本为"." -->
  219. android:textSize="@dimen/tsize"
  220. <!-- 小数点按钮文本大小引用资源文件 -->
  221. android:layout_margin="5dp" />
  222. <!-- 小数点按钮外边距设置为5dp -->
  223. <!-- 减法按钮 -->
  224. <Button
  225. android:id="@+id/btnsub"
  226. <!-- 为减法按钮设置ID -->
  227. android:layout_width="wrap_content"
  228. <!-- 减法按钮宽度设置为包裹内容 -->
  229. android:layout_height="wrap_content"
  230. <!-- 减法按钮高度设置为包裹内容 -->
  231. android:text="-"
  232. <!-- 减法按钮显示文本为"-" -->
  233. android:textSize="@dimen/tsize"
  234. <!-- 减法按钮文本大小引用资源文件 -->
  235. android:layout_margin="5dp" />
  236. <!-- 减法按钮外边距设置为5dp -->
  237. <!-- 等于按钮 -->
  238. <Button
  239. android:id="@+id/btnequ"
  240. <!-- 为等于按钮设置ID -->
  241. android:text="="
  242. <!-- 等于按钮显示文本为"=" -->
  243. android:layout_width="wrap_content"
  244. <!-- 等于按钮宽度设置为包裹内容 -->
  245. android:layout_height="wrap_content"
  246. <!-- 等于按钮高度设置为包裹内容 -->
  247. android:layout_columnSpan="3"
  248. <!-- 等于按钮跨越三列 -->
  249. android:textSize="@dimen/tsize"
  250. <!-- 等于按钮文本大小引用资源文件 -->
  251. android:layout_gravity="fill_horizontal"
  252. <!-- 等于按钮水平填充 -->
  253. android:layout_margin="5dp" />
  254. <!-- 等于按钮外边距设置为5dp -->
  255. <!-- 加法按钮 -->
  256. <Button
  257. android:id="@+id/btnadd"
  258. <!-- 为加法按钮设置ID -->
  259. android:layout_width="wrap_content"
  260. <!-- 加法按钮宽度设置为包裹内容 -->
  261. android:layout_height="wrap_content"
  262. <!-- 加法按钮高度设置为包裹内容 -->
  263. android:text="+"
  264. <!-- 加法按钮显示文本为"+" -->
  265. android:textSize="@dimen/tsize"
  266. <!-- 加法按钮文本大小引用资源文件 -->
  267. android:layout_margin="5dp" />
  268. <!-- 加法按钮外边距设置为5dp -->
  269. </GridLayout>
  270. <!-- GridLayout结束标签,这里结束整个网格布局 -->

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

编辑相应的Java文件

  1. // 声明应用的包名
  2. package com.example.appjisuanqi;
  3. // 导入所需的类
  4. import androidx.appcompat.app.AppCompatActivity;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.Button;
  8. import android.widget.EditText;
  9. import android.widget.Toast;
  10. // 定义一个名为CalculateActivity的类,该类继承自AppCompatActivity
  11. public class CalculateActivity extends AppCompatActivity {
  12. // 声明所需的组件变量
  13. private EditText et;
  14. private Button btn1;
  15. private Button btn2;
  16. private Button btn3;
  17. private Button btn4;
  18. private Button btn5;
  19. private Button btn6;
  20. private Button btn7;
  21. private Button btn8;
  22. private Button btn9;
  23. private Button btndot, btnadd, btnsub, btnmul, btndiv, btnc, btnequ;
  24. // 声明计算器需要的变量
  25. private double num1, num2;
  26. private char operation;
  27. private boolean isOperationSelected;
  28. // 在应用创建时执行的方法
  29. @Override
  30. protected void onCreate(Bundle savedInstanceState) {
  31. super.onCreate(savedInstanceState);
  32. setContentView(R.layout.activity_main3);
  33. // 将布局文件中的组件与变量绑定
  34. et = findViewById(R.id.et);
  35. Button btn0 = findViewById(R.id.btn0);
  36. btn1 = findViewById(R.id.btn1);
  37. btn2 = findViewById(R.id.btn2);
  38. btn3 = findViewById(R.id.btn3);
  39. btn4 = findViewById(R.id.btn4);
  40. btn5 = findViewById(R.id.btn5);
  41. btn6 = findViewById(R.id.btn6);
  42. btn7 = findViewById(R.id.btn7);
  43. btn8 = findViewById(R.id.btn8);
  44. btn9 = findViewById(R.id.btn9);
  45. btndot = findViewById(R.id.btndot);
  46. btnadd = findViewById(R.id.btnadd);
  47. btnsub = findViewById(R.id.btnsub);
  48. btnmul = findViewById(R.id.btnmul);
  49. btndiv = findViewById(R.id.btndiv);
  50. btnc = findViewById(R.id.btnc);
  51. btnequ = findViewById(R.id.btnequ);
  52. // 为各个按钮设置点击事件监听器
  53. // 数字按钮的点击事件
  54. btn0.setOnClickListener(new View.OnClickListener() {
  55. @Override
  56. public void onClick(View v) {
  57. appendNumber("0");
  58. }
  59. });
  60. // ...其他数字按钮的点击事件省略,类似于btn0
  61. // 小数点按钮的点击事件
  62. btndot.setOnClickListener(new View.OnClickListener() {
  63. @Override
  64. public void onClick(View v) {
  65. appendNumber(".");
  66. }
  67. });
  68. // 运算符按钮的点击事件
  69. btnadd.setOnClickListener(new View.OnClickListener() {
  70. @Override
  71. public void onClick(View v) {
  72. setOperation('+');
  73. }
  74. });
  75. // ...其他运算符按钮的点击事件省略,类似于btnadd
  76. // 清除按钮的点击事件
  77. btnc.setOnClickListener(new View.OnClickListener() {
  78. @Override
  79. public void onClick(View v) {
  80. et.setText("");
  81. num1 = 0;
  82. num2 = 0;
  83. isOperationSelected = false;
  84. }
  85. });
  86. // 等于按钮的点击事件
  87. btnequ.setOnClickListener(new View.OnClickListener() {
  88. @Override
  89. public void onClick(View v) {
  90. if (!isOperationSelected) {
  91. Toast.makeText(CalculateActivity.this, "请选择操作符", Toast.LENGTH_SHORT).show();
  92. return;
  93. // 如果已选择操作符,尝试执行计算
  94. try {
  95. num2 = Double.parseDouble(et.getText().toString());
  96. double result = performOperation();
  97. et.setText(String.valueOf(result));
  98. } catch (NumberFormatException e) {
  99. Toast.makeText(CalculateActivity.this, "请输入数字", Toast.LENGTH_SHORT).show();
  100. }
  101. isOperationSelected = false;
  102. }
  103. });
  104. }
  105. // 定义一个方法,用于将数字或小数点添加到显示框中
  106. private void appendNumber(String num) {
  107. String currentText = et.getText().toString();
  108. et.setText(currentText + num);
  109. }
  110. // 定义一个方法,用于设置操作符
  111. private void setOperation(char op) {
  112. if (!isOperationSelected) {
  113. try {
  114. num1 = Double.parseDouble(et.getText().toString());
  115. operation = op;
  116. et.setText("");
  117. isOperationSelected = true;
  118. } catch (NumberFormatException e) {
  119. Toast.makeText(this, "请输入数字", Toast.LENGTH_SHORT).show();
  120. }
  121. } else {
  122. Toast.makeText(this, "操作符已选择", Toast.LENGTH_SHORT).show();
  123. }
  124. }
  125. // 定义一个方法,用于执行运算
  126. private double performOperation() {
  127. double result = 0;
  128. switch (operation) {
  129. case '+':
  130. result = num1 + num2;
  131. break;
  132. case '-':
  133. result = num1 - num2;
  134. break;
  135. case '*':
  136. result = num1 * num2;
  137. break;
  138. case '/':
  139. if (num2 != 0) {
  140. result = num1 / num2;
  141. } else {
  142. Toast.makeText(this, "除数不能为零", Toast.LENGTH_SHORT).show();
  143. }
  144. break;
  145. }
  146. return result;
  147. }
  148. }

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

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号