当前位置:   article > 正文

Android入门:简单计算器的实现_android简单的计算器

android简单的计算器

        在学习了基本布局和点击监听后,可以写一个简单计算器,实现基础的演算功能。

一、运行效果

二、布局

        由于计算器的组件基本都是对齐的,因此父布局使用了网格布局。计算结果使用TextView显示,按钮就使用Button即可。

GridLayout:

        设置行数、列数:android:rowCount="6"/android:columnCount"4" 

        设置组件横向横跨:android:layout_columnSpan="2" //设置在子组件中

布局样式如下:
  1. <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:rowCount="6"
  6. android:columnCount="4"
  7. tools:context=".activity.ComputeActivity">
  8. <TextView
  9. android:id="@+id/compute_textview"
  10. android:layout_columnSpan="4"
  11. android:layout_gravity="fill"
  12. android:background="@drawable/computetextview_style"
  13. android:text="0"
  14. android:textSize="40sp"
  15. android:layout_margin="10dp"
  16. android:gravity="right"></TextView>
  17. <Button
  18. android:id="@+id/back"
  19. android:layout_gravity="fill"
  20. android:layout_columnSpan="2"
  21. android:text="回退">
  22. </Button>
  23. <Button
  24. android:id="@+id/clear"
  25. android:layout_gravity="fill"
  26. android:layout_columnSpan="2"
  27. android:text="清空">
  28. </Button>
  29. <Button
  30. android:id="@+id/plus"
  31. android:text="+" />
  32. <Button
  33. android:id="@+id/num1"
  34. android:text="1" />
  35. <Button
  36. android:id="@+id/num2"
  37. android:text="2" />
  38. <Button
  39. android:id="@+id/num3"
  40. android:text="3" />
  41. <Button
  42. android:id="@+id/less"
  43. android:text="-" />
  44. <Button
  45. android:id="@+id/num4"
  46. android:text="4" />
  47. <Button android:id="@+id/num5"
  48. android:text="5" />
  49. <Button
  50. android:id="@+id/num6"
  51. android:text="6" />
  52. <Button
  53. android:id="@+id/multiply"
  54. android:text="*" />
  55. <Button
  56. android:id="@+id/num7"
  57. android:text="7" />
  58. <Button
  59. android:id="@+id/num8"
  60. android:text="8" />
  61. <Button
  62. android:id="@+id/num9"
  63. android:text="9" />
  64. <Button
  65. android:id="@+id/divide"
  66. android:text="/" />
  67. <Button
  68. android:id="@+id/point"
  69. android:text="." />
  70. <Button
  71. android:id="@+id/num0"
  72. android:text="0" />
  73. <Button android:id="@+id/equal"
  74. android:text="=" />
  75. </GridLayout>

        为了好看,这里给TextView设置了自定义shape背景

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <shape xmlns:android="http://schemas.android.com/apk/res/android">
  3. <stroke android:color="#E93A3A3A"
  4. android:width="3sp"/>
  5. <corners android:radius="10sp"/>
  6. <padding android:bottom="5px"
  7. android:top="5dp"
  8. android:left="5dp"
  9. android:right="5dp"/>
  10. </shape>

三、添加点击监听并实现运算逻辑

        在Activity的onCreate方法中加载布局文件并为其中所有的Button组件设置点击监听

  1. private static String TAG = ComputeActivity.class.getSimpleName();
  2. private TextView textView;
  3. private float ansNum=0;
  4. private char op='=';
  5. @SuppressLint("MissingInflatedId")
  6. @Override
  7. protected void onCreate(Bundle savedInstanceState) {
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_compute);
  10. textView = findViewById(R.id.compute_textview);
  11. NumberListener numberListener = new NumberListener();
  12. OtherLister otherLister = new OtherLister();
  13. findViewById(R.id.num1).setOnClickListener(numberListener);
  14. findViewById(R.id.num2).setOnClickListener(numberListener);
  15. findViewById(R.id.num3).setOnClickListener(numberListener);
  16. findViewById(R.id.num4).setOnClickListener(numberListener);
  17. findViewById(R.id.num5).setOnClickListener(numberListener);
  18. findViewById(R.id.num6).setOnClickListener(numberListener);
  19. findViewById(R.id.num7).setOnClickListener(numberListener);
  20. findViewById(R.id.num8).setOnClickListener(numberListener);
  21. findViewById(R.id.num9).setOnClickListener(numberListener);
  22. findViewById(R.id.num0).setOnClickListener(numberListener);
  23. findViewById(R.id.point).setOnClickListener(numberListener);
  24. findViewById(R.id.divide).setOnClickListener(otherLister);
  25. findViewById(R.id.multiply).setOnClickListener(otherLister);
  26. findViewById(R.id.plus).setOnClickListener(otherLister);
  27. findViewById(R.id.less).setOnClickListener(otherLister);
  28. findViewById(R.id.equal).setOnClickListener(otherLister);
  29. findViewById(R.id.back).setOnClickListener(otherLister);
  30. findViewById(R.id.clear).setOnClickListener(otherLister);
  31. }

        创建两个内部类实现View.OnClickListener的onClick方法

NumberListener——实现TextView对数字按钮的响应
  1. private class NumberListener implements View.OnClickListener{
  2. @Override
  3. public void onClick(View view) {
  4. String ans = (String) textView.getText();
  5. String n="";
  6. switch(view.getId()){
  7. case R.id.num1:
  8. n = "1";
  9. break;
  10. case R.id.num2:
  11. n = "2";
  12. break;
  13. case R.id.num3:
  14. n = "3";
  15. break;
  16. case R.id.num4:
  17. n = "4";
  18. break;
  19. case R.id.num5:
  20. n = "5";
  21. break;
  22. case R.id.num6:
  23. n = "6";
  24. break;
  25. case R.id.num7:
  26. n = "7";
  27. break;
  28. case R.id.num8:
  29. n = "8";
  30. break;
  31. case R.id.num9:
  32. n = "9";
  33. break;
  34. case R.id.num0:
  35. n = "0";
  36. break;
  37. case R.id.point:
  38. n=".";
  39. break;
  40. }
  41. if(ans.equals("0")&&!n.equals("."))
  42. textView.setText(n);
  43. else
  44. textView.setText(ans.concat(n));
  45. }
  46. }
OtherListener——实现不同操作符的运算关系
  1. private class OtherLister implements View.OnClickListener {
  2. @Override
  3. public void onClick(View view) {
  4. String ans = (String) textView.getText();
  5. //String n = "";
  6. switch (view.getId()) {
  7. case R.id.back:
  8. textView.setText(ans.substring(0, ans.length() - 1));
  9. break;
  10. case R.id.clear:
  11. textView.setText("0");
  12. ansNum=0;
  13. op='=';
  14. break;
  15. case R.id.divide:
  16. computeNumber(Float.parseFloat((String) textView.getText()));
  17. textView.setText("0");
  18. op = '/';
  19. break;
  20. case R.id.multiply:
  21. computeNumber(Float.parseFloat((String) textView.getText()));
  22. textView.setText("0");
  23. op = '*';
  24. break;
  25. case R.id.plus:
  26. computeNumber(Float.parseFloat((String) textView.getText()));
  27. textView.setText("0");
  28. op = '+';
  29. break;
  30. case R.id.less:
  31. computeNumber(Float.parseFloat((String) textView.getText()));
  32. textView.setText("0");
  33. op = '-';
  34. break;
  35. case R.id.equal:
  36. computeNumber(Float.parseFloat((String) textView.getText()));
  37. textView.setText(String.valueOf(ansNum));
  38. op='=';
  39. break;
  40. }
  41. }
  42. }
  43. private void computeNumber(float num) {
  44. switch (op) {
  45. case '+':
  46. ansNum+=num;
  47. break;
  48. case '-':
  49. ansNum-=num;
  50. break;
  51. case '*':
  52. ansNum*=num;
  53. break;
  54. case '/':
  55. ansNum/=num;
  56. break;
  57. default:
  58. ansNum=num;
  59. }
  60. Log.d("compute",op+"");
  61. Log.d("compute",String.valueOf(ansNum));
  62. }

        现在,这个简单计算器已经可以正常运行了,与真正的计算器相比还是十分简陋的,主要是学习布局和监听事件。

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

闽ICP备14008679号