【AS入门笔记】一个简单的计算器

题目

设计一个计算器。要求布局美观,能实现手机计算器的基本功能。使用style统一设置控件的外观。

参考学习

扣了按键响应函数:用Android Studio编写简单的计算器,并实现具体功能

代码

Activity的java文件MainActivity.java

package com.example.wangyifan.calculator;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {
    public final static String EXTRA_MESSAGE = "it.uibe.edu.cn.myapplication.MESSAGE";
    private TextView txt;  /*显示计算过程及结果*/
    private Button butp, but1, but2, but3, but4, but5, but6, but7, but8, but9, but0, buta, buts, butm, butdiv, butdopt, buteq;
    double num1 = 0, num2 = 0;
    double result = 0;   /*计算结果*/
    int op = 0;     /*判断操作数*/

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        txt = (TextView) findViewById(R.id.textView);    /*与用户界面程序中组件建立关联*/
        butp = (Button) findViewById(R.id.butCancel);   /*清除*/
        but1 = (Button) findViewById(R.id.but_1);
        but2 = (Button) findViewById(R.id.but_2);
        but3 = (Button) findViewById(R.id.but_3);
        but4 = (Button) findViewById(R.id.but_4);
        but5 = (Button) findViewById(R.id.but_5);
        but6 = (Button) findViewById(R.id.but_6);
        but7 = (Button) findViewById(R.id.but_7);
        but8 = (Button) findViewById(R.id.but_8);
        but9 = (Button) findViewById(R.id.but_9);
        but0 = (Button) findViewById(R.id.but_0);
        buta = (Button) findViewById(R.id.but_add);   /*加*/
        buts = (Button) findViewById(R.id.but_sub);    /*减*/
        butm = (Button) findViewById(R.id.but_mut);    /*乘*/
        butdiv = (Button) findViewById(R.id.but_div);    /*除*/
        butdopt = (Button) findViewById(R.id.but_dopt);   /*点*/
        buteq = (Button) findViewById(R.id.but_equ);       /*等于*/


        butp.setOnClickListener(new mClick());
        but1.setOnClickListener(new mClick());
        but2.setOnClickListener(new mClick());
        but3.setOnClickListener(new mClick());
        but4.setOnClickListener(new mClick());
        but5.setOnClickListener(new mClick());
        but6.setOnClickListener(new mClick());
        but7.setOnClickListener(new mClick());
        but8.setOnClickListener(new mClick());
        but9.setOnClickListener(new mClick());
        but0.setOnClickListener(new mClick());
        buta.setOnClickListener(new mClick());
        buts.setOnClickListener(new mClick());
        butm.setOnClickListener(new mClick());
        butdiv.setOnClickListener(new mClick());
        butdopt.setOnClickListener(new mClick());
        buteq.setOnClickListener(new mClick());
    }

    class mClick implements View.OnClickListener {
        public void onClick(View v) {

            switch (v.getId()) {           /*用swtich()方法,判断点击按钮的id*/
                case R.id.butCancel:    /*清除,直接将输入的所有符号清空*/
                    txt.setText(null);
                    break;
                    /*数字,小数点按键*/
                case R.id.but_1:
                    String str1 = txt.getText().toString(); /*获取输入内容并转为string类型/
                    str1+="1";   /*拼接字符串*/
                    txt.setText(str1);   /*显示输入内容*/
                    break;
                case R.id.but_2:
                    String str2 = txt.getText().toString();
                    str2 += "2";
                    txt.setText(str2);
                    break;
                case R.id.but_3:
                    String str3 = txt.getText().toString();
                    str3 += "3";
                    txt.setText(str3);
                    break;
                case R.id.but_4:
                    String str4 = txt.getText().toString();
                    str4 += "4";
                    txt.setText(str4);
                    break;
                case R.id.but_5:
                    String str5 = txt.getText().toString();
                    str5 += "5";
                    txt.setText(str5);
                    break;
                case R.id.but_6:
                    String str6 = txt.getText().toString();
                    str6 += "6";
                    txt.setText(str6);
                    break;
                case R.id.but_7:
                    String str7 = txt.getText().toString();
                    str7 += "7";
                    txt.setText(str7);
                    break;
                case R.id.but_8:
                    String str8 = txt.getText().toString();
                    str8 += "8";
                    txt.setText(str8);
                    break;
                case R.id.but_9:
                    String str9 = txt.getText().toString();
                    str9 += "9";
                    txt.setText(str9);
                    break;
                case R.id.but_0:
                    String strr = txt.getText().toString();
                    strr += "0";
                    txt.setText(strr);
                    break;
                case R.id.but_dopt:
                    String strd = txt.getText().toString();
                    strd += ".";
                    txt.setText(strd);
                    break;
                /*运算符按键*/
                case R.id.but_add:
                    String stradd = txt.getText().toString();/*按运算符,获取要计算的数字,并放入num1等待计算*/
                    if (stradd.equals(null))  /*判断按运算符前是否输入要计算的数字,若为空,则返回*/ {
                        return;
                    }
                    num1 = Double.valueOf(stradd);/*将获取的字符串转化为double类型以便计算*/
                    txt.setText(null);
                    op = 1;
                    break;
                case R.id.but_sub:
                    String strsub = txt.getText().toString();
                    if (strsub.equals(null)) {
                        return;
                    }
                    num1 = Double.valueOf(strsub);
                    txt.setText(null);
                    op = 2;
                    break;
                case R.id.but_mut:
                    String strmut = txt.getText().toString();
                    if (strmut.equals(null)) {
                        return;
                    }
                    num1 = Double.valueOf(strmut);
                    txt.setText(null);
                    op = 3;
                    break;
                case R.id.but_div:
                    String strdiv = txt.getText().toString();
                    if (strdiv.equals(null)) {
                        return;
                    }
                    num1 = Double.valueOf(strdiv);
                    txt.setText(null);
                    op = 4;
                    break;
                case R.id.but_equ:
                    String strequ = txt.getText().toString();
                    num2 = Double.valueOf(strequ);
                    txt.setText(null);
                    switch (op) {      /*用switch函数来判断进行何种操作,实施运算并得出结果*/
                        case 1:
                            result = num1 + num2;
                            txt.setText(String.valueOf(num1) + "+" + String.valueOf(num2) + "=" + String.valueOf(result));/*获取结果并将其转为字符串输出*/
                            break;
                        case 2:
                            result = num1 - num2;
                            txt.setText(String.valueOf(num1) + "-" + String.valueOf(num2) + "=" + String.valueOf(result));
                            break;
                        case 3:
                            result = num1 * num2;
                            txt.setText(String.valueOf(num1) + "*" + String.valueOf(num2) + "=" + String.valueOf(result));
                            break;
                        case 4:
                            if (num2 == 0) {
                                txt.setText("除数不能为0!");   /*规定除数不能为0,否则报错*/
                            } else {
                                result = num1 / num2;
                                txt.setText(String.valueOf(num1) + "/" + String.valueOf(num2) + "=" + String.valueOf(result));
                            }
                            break;
                        default:
                            result = 0;
                            break;
                    }
            }
        }
    }
}

布局文件activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.wangyifan.calculator.MainActivity">


    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="@color/mGray"
        android:id="@+id/view"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="103dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:textSize="45sp"
        android:hint="0"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_alignBottom="@+id/view"
        android:layout_alignStart="@+id/view" />

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="368dp"
        android:layout_height="479dp"
        android:layout_marginStart="4dp"
        android:layout_marginTop="148dp"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/butCancel"
                style="@style/MyButton.Operator.Clear_Del"
                android:layout_width="wrap_content"
                android:layout_weight="1"
                android:text="C" />

            <Button
                android:id="@+id/but_div"
                style="@style/MyButton.Operator"
                android:text="÷" />

            <Button
                android:id="@+id/but_mut"
                style="@style/MyButton.Operator"
                android:text="×" />


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <Button
                android:id="@+id/but_7"
                style="@style/MyButton.Digital"
                android:layout_weight="1"
                android:text="7" />

            <Button
                android:id="@+id/but_8"
                style="@style/MyButton.Digital"
                android:layout_weight="1"
                android:text="8" />

            <Button
                android:id="@+id/but_9"
                style="@style/MyButton.Digital"
                android:layout_weight="1"
                android:text="9" />

            <Button
                android:id="@+id/but_sub"
                style="@style/MyButton.Operator"
                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/but_4"
                style="@style/MyButton.Digital"
                android:layout_weight="1"
                android:text="4" />

            <Button
                android:id="@+id/but_5"
                style="@style/MyButton.Digital"
                android:layout_weight="1"
                android:text="5" />

            <Button
                android:id="@+id/but_6"
                style="@style/MyButton.Digital"
                android:layout_weight="1"
                android:text="6" />

            <Button
                android:id="@+id/but_add"
                style="@style/MyButton.Operator"
                android:layout_weight="1"
                android:text="+" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="3"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <Button
                        android:id="@+id/but_1"
                        style="@style/MyButton.Digital"
                        android:layout_weight="2"
                        android:text="1" />

                    <Button
                        android:id="@+id/but_2"
                        style="@style/MyButton.Digital"
                        android:layout_weight="2"
                        android:text="2" />

                    <Button
                        android:id="@+id/but_3"
                        style="@style/MyButton.Digital"
                        android:layout_weight="2"
                        android:text="3" />
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="horizontal">

                    <Button
                        android:id="@+id/but_0"
                        style="@style/MyButton.Digital.Zero"
                        android:layout_weight="2"
                        android:text="0" />

                    <Button
                        android:id="@+id/but_dopt"
                        style="@style/MyButton.Digital.Zero"
                        android:layout_weight="1"
                        android:text="." />

                </LinearLayout>

            </LinearLayout>

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:orientation="vertical">

                <Button
                    android:id="@+id/but_equ"
                    style="@style/MyButton.Operator"
                    android:layout_weight="1"
                    android:text="=" />
            </LinearLayout>
        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

设置style的xml文件calculatorstyle.xml

这个文件在res/values下新建。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Base application theme.   -->
    <style name="ResultView" parent="@android:style/TextAppearance.Medium">
        <!-- Customize your theme here. -->
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:background">@color/mLight</item>
        <item name="android:textColor">@color/mBlue</item>
        <item name="android:gravity">right|bottom</item>
        <item name="android:paddingBottom">5dp</item>
        <item name="android:paddingRight">20dp</item>
        <item name="android:textSize">50sp</item>
        <item name="android:layout_weight">1</item>
    </style>

    <style name="MyButton" parent="android:MediaButton">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:gravity">center</item>
        <item name="android:textSize">30sp</item>
        <item name="android:layout_margin">2dp</item>
        <item name="android:background">@drawable/caculator_shape</item>
        <!--  <item name="android:layout_weight">1</item>-->
        <!-- <item name="android:background">@color/mWhite</item>-->
    </style>
    <style name="MyButton.Digital">
        <item name="android:textColor">#000000</item>
    </style>
    <style name="MyButton.Operator">
        <item name="android:textColor">@color/mBlue</item>
    </style>
    <style name="MyButton.Operator.Clear_Del">
        <item name="android:textColor">@color/mOrange</item>
    </style>
    <style name="MyButton.Digital.Zero">
        <item name="android:layout_width">0dp</item>
    </style>
</resources>

设置color的xml文件caculator_shape.xml

这个新建在res/drawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <corners android:radius="20dp"/>
    <gradient
        android:startColor="@color/mBlue"
        android:endColor="@color/mLight"
        android:angle="45"        />
</shape>

运行截图

在这里插入图片描述

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Python入门笔记,我可以提供一些基本的知识点: 1. 在Python中,数字和字符串不能直接进行加法运算,只能是字符串和字符串的拼接。 2. 在编写Python程序时,如果在字符串中使用单引号,需要注意使用成对出现的单引号。如果使用单个单引号,可能会导致解析器报错。 3. 在Python中,逻辑运算符'and'和'or'不一定会计算右侧表达式的值。有时只需计算左侧表达式即可得出结果。这是因为'and'和'or'会将其中一个表达式的值作为最终结果,而不仅仅是True或False。 4. Python的流程控制中,顺序结构是最基本的结构,按照代码的编写顺序依次执行。 这些是Python入门笔记中的一些要点,希望对你有所帮助。如果你有其他问题,欢迎继续提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python入门课程笔记](https://blog.csdn.net/YV_LING/article/details/123413336)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [python入门学习笔记](https://blog.csdn.net/Lalalalazy/article/details/113181549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值