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

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

一、运行效果

二、布局

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

GridLayout:

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

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

布局样式如下:
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:rowCount="6"
        android:columnCount="4"
        tools:context=".activity.ComputeActivity">

        <TextView
            android:id="@+id/compute_textview"
            android:layout_columnSpan="4"
            android:layout_gravity="fill"
            android:background="@drawable/computetextview_style"
            android:text="0"
            android:textSize="40sp"
            android:layout_margin="10dp"
            android:gravity="right"></TextView>

        <Button
            android:id="@+id/back"
            android:layout_gravity="fill"
            android:layout_columnSpan="2"
            android:text="回退">
        </Button>

        <Button
            android:id="@+id/clear"
            android:layout_gravity="fill"
            android:layout_columnSpan="2"
            android:text="清空">
        </Button>

        <Button
            android:id="@+id/plus"
            android:text="+" />
        <Button
            android:id="@+id/num1"
            android:text="1" />
        <Button
            android:id="@+id/num2"
            android:text="2" />
        <Button
            android:id="@+id/num3"
            android:text="3" />
        <Button
            android:id="@+id/less"
            android:text="-" />
        <Button
            android:id="@+id/num4"
            android:text="4" />
        <Button android:id="@+id/num5"
            android:text="5" />
        <Button
            android:id="@+id/num6"
            android:text="6" />
        <Button
            android:id="@+id/multiply"
            android:text="*" />
        <Button
            android:id="@+id/num7"
            android:text="7" />
        <Button
            android:id="@+id/num8"
            android:text="8" />
        <Button
            android:id="@+id/num9"
            android:text="9" />
        <Button
            android:id="@+id/divide"
            android:text="/" />
        <Button
            android:id="@+id/point"
            android:text="." />
        <Button
            android:id="@+id/num0"
            android:text="0" />
        <Button android:id="@+id/equal"
            android:text="=" />
    </GridLayout>

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

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

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

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

    private static String TAG  = ComputeActivity.class.getSimpleName();
    private TextView textView;
    private float ansNum=0;
    private char op='=';

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_compute);
        textView = findViewById(R.id.compute_textview);
        NumberListener numberListener = new NumberListener();
        OtherLister otherLister = new OtherLister();
        findViewById(R.id.num1).setOnClickListener(numberListener);
        findViewById(R.id.num2).setOnClickListener(numberListener);
        findViewById(R.id.num3).setOnClickListener(numberListener);
        findViewById(R.id.num4).setOnClickListener(numberListener);
        findViewById(R.id.num5).setOnClickListener(numberListener);
        findViewById(R.id.num6).setOnClickListener(numberListener);
        findViewById(R.id.num7).setOnClickListener(numberListener);
        findViewById(R.id.num8).setOnClickListener(numberListener);
        findViewById(R.id.num9).setOnClickListener(numberListener);
        findViewById(R.id.num0).setOnClickListener(numberListener);
        findViewById(R.id.point).setOnClickListener(numberListener);
        findViewById(R.id.divide).setOnClickListener(otherLister);
        findViewById(R.id.multiply).setOnClickListener(otherLister);
        findViewById(R.id.plus).setOnClickListener(otherLister);
        findViewById(R.id.less).setOnClickListener(otherLister);
        findViewById(R.id.equal).setOnClickListener(otherLister);
        findViewById(R.id.back).setOnClickListener(otherLister);
        findViewById(R.id.clear).setOnClickListener(otherLister);
    }

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

NumberListener——实现TextView对数字按钮的响应
    private class NumberListener implements View.OnClickListener{
        @Override
        public void onClick(View view) {
            String ans = (String) textView.getText();
            String n="";
            switch(view.getId()){
                case R.id.num1:
                    n = "1";
                    break;
                case R.id.num2:
                    n = "2";
                    break;
                case R.id.num3:
                    n = "3";
                    break;
                case R.id.num4:
                    n = "4";
                    break;
                case R.id.num5:
                    n = "5";
                    break;
                case R.id.num6:
                    n = "6";
                    break;
                case R.id.num7:
                    n = "7";
                    break;
                case R.id.num8:
                    n = "8";
                    break;
                case R.id.num9:
                    n = "9";
                    break;
                case R.id.num0:
                    n = "0";
                    break;
                case R.id.point:
                    n=".";
                    break;
            }
            if(ans.equals("0")&&!n.equals("."))
                textView.setText(n);
            else
                textView.setText(ans.concat(n));
        }
    }
OtherListener——实现不同操作符的运算关系
    private class OtherLister implements View.OnClickListener {
        @Override
        public void onClick(View view) {
            String ans = (String) textView.getText();
            //String n = "";
            switch (view.getId()) {
                case R.id.back:
                    textView.setText(ans.substring(0, ans.length() - 1));
                    break;
                case R.id.clear:
                    textView.setText("0");
                    ansNum=0;
                    op='=';
                    break;
                case R.id.divide:
                    computeNumber(Float.parseFloat((String) textView.getText()));
                    textView.setText("0");
                    op = '/';
                    break;
                case R.id.multiply:
                    computeNumber(Float.parseFloat((String) textView.getText()));
                    textView.setText("0");
                    op = '*';
                    break;
                case R.id.plus:
                    computeNumber(Float.parseFloat((String) textView.getText()));
                    textView.setText("0");
                    op = '+';
                    break;
                case R.id.less:
                    computeNumber(Float.parseFloat((String) textView.getText()));
                    textView.setText("0");
                    op = '-';
                    break;
                case R.id.equal:
                    computeNumber(Float.parseFloat((String) textView.getText()));
                    textView.setText(String.valueOf(ansNum));
                    op='=';
                    break;
            }
        }
    }



    private void computeNumber(float num) {
        switch (op) {
            case '+':
                ansNum+=num;
                break;
            case '-':
                ansNum-=num;
                break;
            case '*':
                ansNum*=num;
                break;
            case '/':
                ansNum/=num;
                break;
            default:
                ansNum=num;
        }
        Log.d("compute",op+"");
        Log.d("compute",String.valueOf(ansNum));
    }

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

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,我可以为您提供一些基本的步骤和代码片段来实现一个简单的计算器。 步骤: 1. 打开Android Studio,创建一个新项目。 2. 在项目中创建一个新的Activity,并在布局文件中添加一些按钮和显示结果的TextView。 3. 在MainActivity.java文件中,获取按钮和TextView的引用,并为每个按钮设置一个点击侦听器。 4. 在点击事件监听器中,使用switch语句根据按钮的标识符执行相应的操作。 5. 根据用户输入的数字和运算符,计算结果并将其显示在TextView中。 以下是一些示例代码,帮助您开始编写您的计算器应用程序: activity_main.xml文件: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:id="@+id/result" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="30sp" android:gravity="end" android:padding="10dp" android:text="0" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/button_7" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="7" /> <Button android:id="@+id/button_8" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="8" /> <Button android:id="@+id/button_9" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="9" /> <Button android:id="@+id/button_divide" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="/" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/button_4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="4" /> <Button android:id="@+id/button_5" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="5" /> <Button android:id="@+id/button_6" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="6" /> <Button android:id="@+id/button_multiply" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="*" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/button_1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="1" /> <Button android:id="@+id/button_2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="2" /> <Button android:id="@+id/button_3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="3" /> <Button android:id="@+id/button_subtract" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="-" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/button_clear" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="C" /> <Button android:id="@+id/button_0" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="0" /> <Button android:id="@+id/button_equal" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="=" /> <Button android:id="@+id/button_add" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="+" /> </LinearLayout> </LinearLayout> ``` MainActivity.java文件: ``` public class MainActivity extends AppCompatActivity { private TextView resultTextView; private Button button0, button1, button2, button3, button4, button5, button6, button7, button8, button9; private Button buttonAdd, buttonSubtract, buttonMultiply, buttonDivide, buttonClear, buttonEqual; private double num1, num2; private boolean add, subtract, multiply, divide; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); resultTextView = findViewById(R.id.result); button0 = findViewById(R.id.button_0); button1 = findViewById(R.id.button_1); button2 = findViewById(R.id.button_2); button3 = findViewById(R.id.button_3); button4 = findViewById(R.id.button_4); button5 = findViewById(R.id.button_5); button6 = findViewById(R.id.button_6); button7 = findViewById(R.id.button_7); button8 = findViewById(R.id.button_8); button9 = findViewById(R.id.button_9); buttonAdd = findViewById(R.id.button_add); buttonSubtract = findViewById(R.id.button_subtract); buttonMultiply = findViewById(R.id.button_multiply); buttonDivide = findViewById(R.id.button_divide); buttonClear = findViewById(R.id.button_clear); buttonEqual = findViewById(R.id.button_equal); button0.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("0"); } }); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("1"); } }); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("2"); } }); button3.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("3"); } }); button4.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("4"); } }); button5.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("5"); } }); button6.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("6"); } }); button7.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("7"); } }); button8.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("8"); } }); button9.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resultTextView.append("9"); } }); buttonAdd.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (resultTextView.getText().toString().equals("")) { return; } num1 = Double.parseDouble(resultTextView.getText().toString()); add = true; resultTextView.setText(""); } }); buttonSubtract.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (resultTextView.getText().toString().equals("")) { return; } num1 = Double.parseDouble(resultTextView.getText().toString()); subtract = true; resultTextView.setText(""); } }); buttonMultiply.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (resultTextView.getText().toString().equals("")) { return; } num1 = Double.parseDouble(resultTextView.getText().toString()); multiply = true; resultTextView.setText(""); } }); buttonDivide.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (resultTextView.getText().toString().equals("")) { return; } num1 = Double.parseDouble(resultTextView.getText().toString()); divide = true; resultTextView.setText(""); } }); buttonClear.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { num1 = 0; num2 = 0; add = false; subtract = false; multiply = false; divide = false; resultTextView.setText(""); } }); buttonEqual.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (resultTextView.getText().toString().equals("")) { return; } num2 = Double.parseDouble(resultTextView.getText().toString()); if (add) { resultTextView.setText(Double.toString(num1 + num2)); add = false; } if (subtract) { resultTextView.setText(Double.toString(num1 - num2)); subtract = false; } if (multiply) { resultTextView.setText(Double.toString(num1 * num2)); multiply = false; } if (divide) { resultTextView.setText(Double.toString(num1 / num2)); divide = false; } } }); } } ``` 这是一个基本的计算器应用程序,您可以根据需要添加更多的功能和操作符。希望这能帮助您入门

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值