当前位置:   article > 正文

移动开发作业三:使用Android studio来实现简单的计算器_androidstudio计算器代码

androidstudio计算器代码

一.实验要求

结合所学内容利用Android studio来设计一个开发实例,这里去我选择做一个简易的计算器,可以初步实现加减乘除。

二.实验功能

计算器与我们平常手机上的计算器一样,可以进行加减乘除操作。

三.实验过程

1.首先是关于计算器的布局

在layout文件下的drawable文件中新建四个xml文件:

button_bg.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <!-- 背景色 -->
  4. <solid android:color="#FFB400"/>
  5. <corners
  6. android:radius="5dp"/>
  7. </shape>

这是一个用于定义 Android 形状的 XML 文件。这个文件定义了一个背景色为黄色(#FFB400)的形状,并设置了圆角半径为5dp。

gray.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <corners
  4. android:radius="5dp"/>
  5. <solid
  6. android:color="#ffDEDEDE"/>
  7. </shape>

这是一个用于定义 Android 形状的 XML 文件。这个文件定义了一个背景色为灰色(#ffDEDEDE)的形状,并设置了圆角半径为5dp。

white.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <corners
  4. android:radius="5dp"/>
  5. <solid
  6. android:color="#ffffffff"/>
  7. </shape>

这是一个用于定义 Android 形状的 XML 文件。这个文件定义了一个背景色为白色(#ffffffff)的形状,并设置了圆角半径为5dp。

selector.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <item android:drawable="@drawable/gray"
  4. android:state_pressed="true"/>
  5. <item android:drawable="@drawable/white"/>
  6. </selector>

这是一个用于定义状态选择器的 XML 文件。在这个文件中,当控件处于被按下的状态时(state_pressed=true),会显示gray.xml所定义的样式,否则显示white.xml所定义的样式。

然后就是关于activity_main.xml文件的设计,由于代码较多在这里只展示一部分,具体代码放在源码链接。

  1. <EditText
  2. android:id="@+id/et_input"
  3. android:layout_width="match_parent"
  4. android:layout_height="80dp"
  5. android:background="@drawable/white"
  6. android:editable="false"
  7. android:paddingBottom="5dp"
  8. android:textSize="30sp" />
  9. <LinearLayout
  10. android:layout_width="fill_parent"
  11. android:layout_height="wrap_content"
  12. android:layout_marginTop="30dp"
  13. android:orientation="horizontal"
  14. android:gravity="center_horizontal">
  15. <Button
  16. android:id="@+id/btn_clr"
  17. android:layout_width="80dp"
  18. android:layout_height="80dp"
  19. android:text="C"
  20. android:textSize="30sp"
  21. android:paddingRight="15sp"
  22. android:paddingBottom="15sp"
  23. android:background="@drawable/selector"/>
  24. <Button
  25. android:id="@+id/btn_del"
  26. android:layout_width="80dp"
  27. android:layout_height="80dp"
  28. android:text="⬅"
  29. android:textSize="30sp"
  30. android:layout_marginLeft="10dp"
  31. android:paddingRight="15sp"
  32. android:paddingBottom="15sp"
  33. android:background="@drawable/selector"/>
  34. <Button
  35. android:id="@+id/btn_div"
  36. android:layout_width="80dp"
  37. android:layout_height="80dp"
  38. android:text="÷"
  39. android:textSize="30sp"
  40. android:layout_marginLeft="10dp"
  41. android:paddingRight="15sp"
  42. android:paddingBottom="15sp"
  43. android:background="@drawable/selector"/>
  44. <Button
  45. android:id="@+id/btn_mul"
  46. android:layout_width="80dp"
  47. android:layout_height="80dp"
  48. android:text="×"
  49. android:textSize="30sp"
  50. android:layout_marginLeft="10dp"
  51. android:paddingRight="15sp"
  52. android:paddingBottom="15sp"
  53. android:background="@drawable/selector"/>
  54. </LinearLayout>

2.关于MainActivity

在onCreate方法中,我们首先通过findViewById方法获取到布局中定义的各个按钮和文本框的引用,并为它们设置点击事件监听器(this),这里我只显示一部分因为内容大致一样。

  1. btn_0 = findViewById(R.id.btn_0);
  2. btn_1 = findViewById(R.id.btn_1);
  3. btn_2 = findViewById(R.id.btn_2);
  1. btn_0.setOnClickListener(this);
  2. btn_1.setOnClickListener(this);
  3. btn_2.setOnClickListener(this);

在onClick方法中,我们根据点击的按钮的id进行不同的处理:

  • 如果点击的按钮是数字或小数点按钮,则将相应的字符追加到当前输入的字符串后面,并更新显示在文本框中。
  • 如果点击的按钮是加、减、乘、除按钮,则在当前输入的字符串后面添加一个空格和相应的运算符,并更新显示在文本框中。
  • 如果点击的按钮是清除按钮,则清空当前输入的字符串,并清空文本框的显示。
  • 如果点击的按钮是删除按钮,则删除当前输入字符串的最后一个字符,并更新显示在文本框中。
  • 如果点击的按钮是等号按钮,则调用getResult方法进行计算,并将结果显示在文本框中。
  1. @Override
  2. public void onClick(View v) {
  3. String str = et_input.getText().toString();
  4. if (v.getId() == R.id.btn_0 || v.getId() == R.id.btn_1 || v.getId() == R.id.btn_2 ||
  5. v.getId() == R.id.btn_3 || v.getId() == R.id.btn_4 || v.getId() == R.id.btn_5 ||
  6. v.getId() == R.id.btn_6 || v.getId() == R.id.btn_7 || v.getId() == R.id.btn_8 ||
  7. v.getId() == R.id.btn_9 || v.getId() == R.id.btn_pt) {
  8. // 处理数字和小数点按钮的点击事件
  9. if (clr_flag) {
  10. clr_flag = false;
  11. str = "";
  12. et_input.setText("");
  13. }
  14. et_input.setText(str + ((Button) v).getText());
  15. } else if (v.getId() == R.id.btn_add || v.getId() == R.id.btn_sub ||
  16. v.getId() == R.id.btn_mul || v.getId() == R.id.btn_div) {
  17. // 处理运算符按钮的点击事件
  18. if (clr_flag) {
  19. clr_flag = false;
  20. str = "";
  21. et_input.setText("");
  22. }
  23. if (str.contains("+") || str.contains("-") || str.contains("×") || str.contains("÷")) {
  24. str = str.substring(0, str.indexOf(" "));
  25. }
  26. et_input.setText(str + " " + ((Button) v).getText() + " ");
  27. } else if (v.getId() == R.id.btn_clr) {
  28. // 处理清除按钮的点击事件
  29. if (clr_flag)
  30. clr_flag = false;
  31. str = "";
  32. et_input.setText("");
  33. } else if (v.getId() == R.id.btn_del) {
  34. // 处理删除按钮的点击事件
  35. if (clr_flag) {
  36. clr_flag = false;
  37. str = "";
  38. et_input.setText("");
  39. } else if (str != null && !str.equals("")) {
  40. et_input.setText(str.substring(0, str.length() - 1));
  41. }
  42. } else if (v.getId() == R.id.btn_eq) {
  43. // 处理等号按钮的点击事件
  44. getResult();
  45. }
  46. }

当输入数据之后就需要输出结果了,这里定义了getResult方法来输出结果。getResult方法用于计算当前输入的表达式,并将结果显示在文本框中。它首先判断表达式中是否包含运算符,如果不包含则直接返回。然后根据运算符的类型进行相应的运算,并将结果显示在文本框中。

  1. private void getResult() {
  2. String exp=et_input.getText().toString();
  3. if(exp==null||exp.equals("")) return ;
  4. //因为没有运算符所以不用运算
  5. if(!exp.contains(" ")){
  6. return ;
  7. }
  8. if(clr_flag){
  9. clr_flag=false;
  10. return;
  11. }
  12. clr_flag=true;
  13. //截取运算符前面的字符串
  14. String s1=exp.substring(0,exp.indexOf(" "));
  15. //截取的运算符
  16. String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);
  17. //截取运算符后面的字符串
  18. String s2=exp.substring(exp.indexOf(" ")+3);
  19. double cnt=0;
  20. if(!s1.equals("")&&!s2.equals("")){
  21. double d1=Double.parseDouble(s1);
  22. double d2=Double.parseDouble(s2);
  23. if(op.equals("+")){
  24. cnt=d1+d2;
  25. }
  26. if(op.equals("-")){
  27. cnt=d1-d2;
  28. }
  29. if(op.equals("×")){
  30. cnt=d1*d2;
  31. }
  32. if(op.equals("÷")){
  33. if(d2==0) cnt=0;
  34. else cnt=d1/d2;
  35. }
  36. if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("÷")) {
  37. int res = (int) cnt;
  38. et_input.setText(res+"");
  39. }else {
  40. et_input.setText(cnt+"");}
  41. }
  42. //如果s1是空 s2不是空 就执行下一步
  43. else if(!s1.equals("")&&s2.equals("")){
  44. double d1=Double.parseDouble(s1);
  45. if(op.equals("+")){
  46. cnt=d1;
  47. }
  48. if(op.equals("-")){
  49. cnt=d1;
  50. }
  51. if(op.equals("×")){
  52. cnt=0;
  53. }
  54. if(op.equals("÷")){
  55. cnt=0;
  56. }
  57. if(!s1.contains(".")) {
  58. int res = (int) cnt;
  59. et_input.setText(res+"");
  60. }else {
  61. et_input.setText(cnt+"");}
  62. }
  63. //如果s1是空 s2不是空 就执行下一步
  64. else if(s1.equals("")&&!s2.equals("")){
  65. double d2=Double.parseDouble(s2);
  66. if(op.equals("+")){
  67. cnt=d2;
  68. }
  69. if(op.equals("-")){
  70. cnt=0-d2;
  71. }
  72. if(op.equals("×")){
  73. cnt=0;
  74. }
  75. if(op.equals("÷")){
  76. cnt=0;
  77. }
  78. if(!s2.contains(".")) {
  79. int res = (int) cnt;
  80. et_input.setText(res+"");
  81. }else {
  82. et_input.setText(cnt+"");}
  83. }
  84. else {
  85. et_input.setText("");
  86. }
  87. }

结果如下:

加法: 

减法:c

乘法:

除法:

四.实验总结

这次内容具体包括:通过一个启动Activity布置4个按钮,每个按钮分别触发加、减、乘、除的Activity;然后在打开的Activity中实现与实验一类似的页面,以一个按钮触发计算输出。但是在这次实验中我首先用的是switch case语句来记录用户所点击的按钮。但是所有的case语句都报错了,经过查看资料发现问题是由于switch语句的case标签不是常量表达式引起的。在Java中,case标签必须是一个常量表达式,例如整数或字符常量,枚举常量等。如果case语句包含变量或函数调用等非常量表达式,则会引发"Constant expression required"错误。于是我将switch语句替换成了if语句,结果顺利进行。
 

五.代码仓库

xushijie/移动开发计算器

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/311345
推荐阅读
相关标签
  

闽ICP备14008679号