你们要的Android计算器,今天它来了!

你们要的Android计算器,今天它来了!,第1张

概述项目目录一、项目概述二、开发环境三、详细设计1、布局设计2、主函数2.1、控件定义2.2、控件绑定2.3、控件设置监听器2.4、控件设置点击事件2.5、运行结果四、项目效果五、项目总结六、源码下载一、项目概述本次项目主要实现了简单的计算器功能,包括加减乘除基本运算,还有小数点和清零功能。可以算得上是很好的Android界面和按钮点击事件学习实例。刚用模拟器显示hello world的同学或者完全没有接触过Android的同学都可以直接上手。二、开发环境Android版本相对之前调整了一下,现在是4.

项目目录 一、项目概述二、开发环境三、详细设计1、布局设计2、主函数2.1、控件定义2.2、控件绑定2.3、控件设置监听器2.4、控件设置点击事件2.5、运行结果四、项目效果五、项目总结六、源码下载

一、项目概述

本次项目主要实现了简单的计算器功能,包括加减乘除基本运算,还有小数点和清零功能。可以算得上是很好的AndroID界面和按钮点击事件学习实例。刚用模拟器显示hello world的同学或者完全没有接触过AndroID的同学都可以直接上手。

二、开发环境

AndroID版本相对之前调整了一下,现在是4.2.1,当然版本不影响,代码语法并不会变,只是gradle变了而已。到时候导入我项目的时候改下gradle路径就可以了。
如果遇到问题,可以参考这两篇经验:
快速解决Android项目的Gradle报错问题
如何导入gradle版本不同的Android项目

三、详细设计 1、布局设计

在讲布局前我们先介绍GrIDLayout(网格布局),来说下它的优点:

1、可以自己设置布局中组件的排列方式
2、可以自定义网格布局有多少行,多少列
3、可以直接设置组件位于某行某列
4、可以设置组件横跨几行或者几列

下面我们看下计算器的layout代码:

<?xml version="1.0" enCoding="utf-8"?><GrIDLayout    xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:app="http://schemas.androID.com/apk/res-auto"    xmlns:tools="http://schemas.androID.com/tools"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    tools:context=".MainActivity"    androID:orIEntation="vertical">    <GrIDLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:layout_gravity="top">        <!--输入的文本框-->        <EditText            androID:ID="@+ID/result"            androID:layout_wIDth="match_parent"            androID:layout_height="100dp"            androID:hint="请输入数字"            androID:textSize="30dp"/>    </GrIDLayout>    <GrIDLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:rowCount="5"        androID:columnCount="4"        androID:layout_gravity="center|top">        <button            androID:ID="@+ID/btn1"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:layout_columnSpan="1"            androID:text="1" />        <button            androID:ID="@+ID/btn2"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="2" />        <button            androID:ID="@+ID/btn3"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="3" />        <button            androID:ID="@+ID/divIDe"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="/" />        <button            androID:ID="@+ID/btn4"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="4" />        <button            androID:ID="@+ID/btn5"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="5" />        <button            androID:ID="@+ID/btn6"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="6" />        <button            androID:ID="@+ID/multi"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="*" />        <button            androID:ID="@+ID/btn7"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="7"            />        <button            androID:ID="@+ID/btn8"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="8" />        <button            androID:ID="@+ID/btn9"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="9" />        <button            androID:ID="@+ID/sub"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="—" />        <button            androID:ID="@+ID/btn0"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="0" />        <button            androID:ID="@+ID/point"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:layout_columnSpan="1"            androID:text="." />        <button            androID:ID="@+ID/clean"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:text="del" />        <button            androID:ID="@+ID/plus"            androID:layout_wIDth="90dp"            androID:layout_height="60dp"            androID:layout_margin="5dp"            androID:layout_rowspan="1"            androID:text="+" />        <button            androID:ID="@+ID/equ"            androID:layout_wIDth="390dp"            androID:layout_height="60dp"            androID:layout_columnSpan="4"            androID:layout_margin="5dp"            androID:text="="            androID:textSize="30dp"/>    </GrIDLayout></GrIDLayout>

代码很简单,每个button设置了ID,其中“=”按钮横跨一行,其他的都是直接添加的,默认每个组件都是占一行一列。
另外还有一点要注意的:我们通过androID:layout_rowspan与androID:layout_columnSpan设置了组件横跨多行或者多列的话;如果你要让组件填满横越过的行或列的话,需要添加下面这个属性: androID:layout_gravity = “fill”。就像这个计算器显示数字的部分(result输入框)。
我们来看下界面预览:

2、主函数 2.1、控件定义

定义了很多button,分别代表0-9、加减乘除、小数点、等于和清零,这里变量名一定要简洁易懂,不要随意定义变量名,养成好习惯。

    //运算符    private  button plus;//加号+    private  button sub;//减号-    private  button multi; //乘号*    private  button divIDe;// 除号/    private  button point; //小数点.    private  button equ; //等于=    private  button clean;//清除输入框
2.2、控件绑定

将刚刚定义的变量和已经设置好的控件通过ID进行绑定,这样整个变量就代表了这个控件记住,写AndroID一定要先写layout,再写Main函数。

        plus = findVIEwByID(R.ID.plus);// +        sub = findVIEwByID(R.ID.sub);// -        multi = findVIEwByID(R.ID.multi);// *        divIDe = findVIEwByID(R.ID.divIDe); // /        point = findVIEwByID(R.ID.point);//小数点        equ = findVIEwByID(R.ID.equ);//=        clean = findVIEwByID(R.ID.clean);//清空
2.3、控件设置监听器

将每个控件添加上点击事件,这是最常用的方法,系统监听到你的动作从而给出响应。

        plus.setonClickListener(this);        sub.setonClickListener(this);        multi.setonClickListener(this);        divIDe.setonClickListener(this);        equ.setonClickListener(this);        point.setonClickListener(this);        clean.setonClickListener(this);
2.4、控件设置点击事件

这里我们通过变量clear_flag来判断,它是清空标识,true就是清空,false就是未清空。
然后将数字、运算符、其他 *** 作分类即可。

public voID onClick(VIEw vIEw) {        //获取文本内容        String input = editText.getText().toString();        switch (vIEw.getID()){//选择按钮ID            case R.ID.btn0:            case R.ID.btn1:            case R.ID.btn2:            case R.ID.btn3:            case R.ID.btn4:            case R.ID.btn5:            case R.ID.btn6:            case R.ID.btn7:            case R.ID.btn8:            case R.ID.btn9:            case R.ID.point:                if(clear_flag){                    clear_flag = false;                    editText.setText("");//赋值为空                }                editText.setText(input + ((button)vIEw).getText());//结果集就为本身                break;            case R.ID.plus:            case R.ID.sub:            case R.ID.multi:            case R.ID.divIDe://加减乘除一起                if(clear_flag){                    clear_flag = false;                    input = "";                    editText.setText("");                }                editText.setText(input + " " + ((button)vIEw).getText() + " ");                break;            case R.ID.clean://清除输入框                if(clear_flag){                    clear_flag = false;                    input = "";                    editText.setText("");                }else if(input != null || !input.equals("")) {//如果获取到的内容为空                    editText.setText(input.substring(0, input.length() - 1));//结果集为空                }                break;            case R.ID.equ://运算结果等于                getResult();//调用处理结果集的方法                break;        }    }
2.5、运行结果

这部分方法就是计算两个数字运算结果,就是if-else语句,equals( )就是两个对象比较,如果相同则为true,否则为false,contains( ) 就是包含关系,包含为ture,否则为false。

 //运算结果的方法    private voID getResult(){        String exp = editText.getText().toString();//获取文本框的内容        if(exp==null||exp.equals("")){            return;        }        if(!exp.contains(" ")){            return;        }        if(clear_flag){            clear_flag = false;            return;        }        clear_flag = true;        double result = 0;        //进行截取        //运算符前的数字        String s1 = exp.substring(0,exp.indexOf(" "));        //运算符        String op = exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);        //运算符后的数字        String s2 = exp.substring(exp.indexOf(" ")+3);        if(!s1.equals("")&&!s2.equals("")) {//如果包含小数点的运算            double d1 = Double.parseDouble(s1);//则数字都是double类型            double d2 = Double.parseDouble(s2);            if (op.equals("+")) {//如果是 +                result = d1 + d2;            } else if (op.equals("-")) {                result = d1 - d2;            } else if (op.equals("*")) {                result = d1 * d2;            } else if (op.equals("/")) {                if (d2 == 0) { //如果被除数是0                    result = 0; //则结果是0                }                else {//否则执行正常是除法运算                    result = d1 / d2;                }            }            if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {//如果是整数类型                int r = (int) result; //都是整形                editText.setText(r + "");            } else{                editText.setText(result + "");            }        }else if(!s1.equals("") && s2.equals("")){//如果是只输入运算符前的数            editText.setText(exp);//直接返回当前文本框的内容        }else if(s1.equals("") && !s2.equals("")){//如果是只输入运算符后面的数            double d2 = Double.parseDouble(s2);            //运算符前没有输入数字            if (op.equals("+")) {                result = 0 + d2;            } else if (op.equals("-")) {                result = 0 - d2;            } else if (op.equals("*")) {                result = 0;            } else if (op.equals("/")) {                result = 0;            }            if (!s1.contains(".") && !s2.contains(".")) {                int r = (int) result;                editText.setText(r + "");            } else{                editText.setText(result + "");            }        }else {            editText.setText("");        }    }
四、项目效果

1、打开模拟器运行,输入两个数字


2、按等于键,得出结果


3、选择清空键,清除所有结果

五、项目总结

本次项目是比较基础的考验布局和控件的实例,对于初学者来说是非常好的example,可以作为Hello World之后第二个实例,认真消化里面的内容,以后做起来会非常快。

六、源码下载

需要源码学习的同学可以关注我的微信公众号:老鲸鱼的地下城堡,回复:计算器,即可获取源码,还有更多免费的AndroID项目等你来学习。送给大家一份精心整理的AndroID学习宝典:Android项目和Android教程总结(史诗级宝典)

总结

以上是内存溢出为你收集整理的你们要的Android计算器,今天它来了!全部内容,希望文章能够帮你解决你们要的Android计算器,今天它来了!所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1119378.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存