源代码下载:https://gitee.com/zha-yingying/calculator.git

1.建立一个新的Layout,我这里使用的是GridLayout(网格布局),提取屏幕宽度(方便后面设置子控件的宽度)GridLayout的特点是自定义网格布局有几行几列,我们可以将自控件自定义放在第几行第几列。

2.建立一个新的textview(文本框)作为我们计算器输入数字运算符号的界面,将textview放在第一行第一列,设置宽度为屏幕的宽度,这边我们需要提取一下屏幕的宽度。

3.添加子控件 添加按钮到布局上(数字+运算符号+等于符号)分别设置它们的位置,我这里的GridLayout设置的是八行四列,宽度为屏幕宽度的四分之一。

4.给每个控件都加上点击事件,给按钮设置监听器。在MainaActivity中使用enum(枚举)方法,分为四种情况(1)无按钮操作(2)上一次按钮为数字(3)上一次按钮为运算符号(4)上一次按钮为等于,分别写出其操作内容,需要在点击事件中添加状态。

提取屏幕宽度:

WindowManager wm = (WindowManager) this.getSystemService(this.WINDOW_SERVICE);

int width = wm.getDefaultDisplay().getWidth();

添加按钮:

(1)添加数字按钮(依次添加0-9和"."按钮)

Button button1 = new Button(this);
layout1.addView(button1);
GridLayout.LayoutParams bt1 = (GridLayout.LayoutParams) button1.getLayoutParams();
bt1.rowSpec = GridLayout.spec(6,1,GridLayout.CENTER,1);
bt1.columnSpec = GridLayout.spec(0,1,GridLayout.CENTER,1);
bt1.width = width/4;
button1.setText("1");
button1.setLayoutParams(bt1);

(2)添加运算符号按钮(加减乘除这一类)

减号为例:
Button buttonminus = new Button(this);
layout1.addView(buttonminus);
buttonminus.setText("-");
GridLayout.LayoutParams btjian = (GridLayout.LayoutParams) buttonminus.getLayoutParams();
btjian.rowSpec = GridLayout.spec(6, 1, GridLayout.CENTER, 1);
btjian.columnSpec = GridLayout.spec(3, 1, GridLayout.CENTER, 1);
btjian.width = width / 4;
buttonminus.setLayoutParams(btjian);

(3)添加等号按钮

Button buttonequal = new Button(this);
layout1.addView(buttonequal);
buttonequal.setText("=");
GridLayout.LayoutParams btdy = (GridLayout.LayoutParams) buttonequal.getLayoutParams();
btdy.rowSpec = GridLayout.spec(7, 1, GridLayout.CENTER, 1);
btdy.columnSpec = GridLayout.spec(3, 1, GridLayout.CENTER, 1);
btdy.width = width / 4;
buttonequal.setLayoutParams(btdy);

给按钮添加点击事件,设置状态:

(1)数字按钮

button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {NumberClick("1");}
});

(2)运算符号按钮(减号为例子)

buttonminus.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {OperationClick("-");operationType = OperationType.Minus;}
});

(3)等号按钮

buttonequal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {EqualClick("=");}});
}

枚举法举例

新建两个enum的类

ClickType判断上一次按钮是数字/运算符号/等于符号

public enum ClickType {None,Number,Operation,Equqal,
}

OperationType判断上一次的运算符号是加/减/乘/除

public enum OperationType {None,Plus,Minus,Multiply,Divide,}

在MainActivity里:

private ClickType clickType = ClickType.None;
private OperationType operationType = OperationType.None;

//按下数字键时

private void NumberClick(String n){switch (clickType){case None:textView.setText(n);break;case Number:String an = textView.getText().toString();textView.setText(an+n);break;case Operation:textView.setText(n);break;case Equqal:textView.setText(n);break;}clickType = ClickType.Number;
}

//按下操作符号时

private  void OperationClick(String n1){switch ((clickType)){case None:textView.setText("mistake");break;case Number:
switch ((operationType)){case None:String an2 = textView.getText().toString();a = Double.valueOf(an2);textView.setText(an2+n1);break;case Plus:String an3 = textView.getText().toString();b = Double.valueOf(an3);a = a + b;textView.setText(an3+n1);textView.setText(""+a);break;
 case Minus:String an4 = textView.getText().toString();b = Double.valueOf(an4);a = a - b;textView.setText(an4+"-");textView.setText(""+a);break;case Divide:String an5 = textView.getText().toString();b = Double.valueOf(an5);a = a / b;textView.setText(an5+n1);textView.setText(""+a);break;case Multiply:String an6 = textView.getText().toString();b = Double.valueOf(an6);a = a * b;textView.setText(an6+n1);textView.setText(""+a);break;}break;
case  Operation:textView.setText("mistake");break;
case Equqal:String an1 = textView.getText().toString();a = Double.valueOf(an1);break;}clickType = ClickType.Operation;
}

//按下等于号时

private void EqualClick(String n2){switch ((clickType)){case None:textView.setText("mistake");break;case Number:switch ((operationType)){case None:textView.setText(""+a);case Plus:String bn = textView.getText().toString();b = Double.valueOf(bn);b = a + b;textView.setText(""+b);a = 0;break;
 case  Minus:String bn1 = textView.getText().toString();b = Double.valueOf(bn1);b = a - b;textView.setText(""+b);a = 0;break;case Multiply:String bn2 = textView.getText().toString();b = Double.valueOf(bn2);b = a * b;textView.setText(""+b);a = 0;break;case Divide:String bn3 = textView.getText().toString();b = Double.valueOf(bn3);b = a / b;textView.setText(""+b);a = 0;break;}break;case Operation:textView.setText("mistake");break;case Equqal:textView.setText("mistake");break;}clickType = ClickType.Equqal;}

初学编程 第一个小程序Android studio实现计算器功能相关推荐

  1. 如何在小程序里实现一个计算器功能?

    通过使用公式输入框,配置设置值触发器实现一个计算器效果. 效果展示 前置准备 1.制作好的计算器界面 具体步骤 1. 制作计算输入框 2. 创建计算触发器 3. 创建数值输入触发器 4. 创建重置触发 ...

  2. android studio日历小程序,android studio无法加载日历界面

    LayoutInflater inflater= (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_S ...

  3. 微信小程序实现简单的计算器功能

    wxml <view class='content'><input value='{{calculation}}'></input><view class=' ...

  4. 不用代码,10分钟打造属于自己的第一款小程序

    扫码体验 早晨到公司的时候,手机上推送的小程序审核通过的消息,激动的下载了小程序的二维码,扫一扫即可在手机上打开上线的小程序,不枉费昨天晚上熬夜到凌晨,用免费平台测试的功夫 gh_098cec5701 ...

  5. c语言如何输入汉字_C语言入门的第一个小程序

    大部分程序员入门的第一个小程序都是Hello World,还记得当时大一的时候,我室友还特意为了这个发了个说说,现在想起来好有意思,哈哈好了废话不多说,直接干. (PS:如果学过自动忽略) #incl ...

  6. 从0到一开发微信小程序(2)——开发第一个小程序

    文章目录 其他相关文章 1.创建项目 2.小程序代码目录介绍 2.1.描述整体的app.* 2.2.描述各自页面的pages下面的目录 其他相关文章 从0到一开发微信小程序(1)--申请账号并安装开发 ...

  7. 微信小程序零基础入门_第一章 小程序和开发者工具的介绍

    第一章 小程序和开发者工具的基本介绍 1.1 小程序的开发工具 微信小程序的开发者需要先通过微信公众平台注册开发者账号.在微信公众平台网页中的账号分类->小程序中有着较为详细的注册介绍,可以较为 ...

  8. 核桃编程学python吗_学编程要趁早?对话核桃编程X支付宝 “小程序编程马拉松”三强得主...

    原标题:学编程要趁早?对话核桃编程X支付宝 "小程序编程马拉松"三强得主 来源:网络 浏览专业IT技术社区网站,创作沉浸式互动体验游戏,开发辟谣小程序......这并不是程序员大神 ...

  9. 省钱兄校园跑腿源码(公众号+APP+小程序+Android+IOS)校园跑腿社区跑腿同城跑腿任务兼职小程序uniapp前端模版

    开源代码是用户端uniapp部分源码,使用hbuilder导入即可运行 只提供参考学习使用!已经获得软著!不可商业使用!感谢支持 h5体验地址 h5:https://paotui.xianmxkj.c ...

最新文章

  1. [iOS]开发者证书和描述文件的作用
  2. 程序员:今天你读了吗?
  3. mysql的acid_什么是数据库ACID?
  4. VC++中把一个对话框最小化到托盘
  5. excel运行最多行数
  6. 第三次学JAVA再学不好就吃翔(part44)--匿名内部类
  7. Python的内建属性和内建函数
  8. 最近很多面试都是考研凉凉的,心塞!
  9. 05DotNet基本常用类库
  10. 分析“关于Linux内核引入的accept_local参数的一个问题”
  11. 管理新语:别人反映问题,你要形成自己的材料
  12. [3-7]xp系统美化主题包下载每日更新【heizt整理】
  13. 常用的ASCII码值
  14. Python学习之Turtle库
  15. ANC主动降噪的量化描述
  16. 小米盒子2刷android tv,【二次搬运】小米盒子3S刷Android TV教程
  17. MySQL 的 max_allowed_packet
  18. 小学一年级语文心田花开各类词汇用法汇总
  19. 微信公众平台js算法逆向
  20. 魅族 刷机android 6.0,乐视X900+安卓6.0 魅族Flyme6刷机包 最新6.7.12.29R付费纯净版

热门文章

  1. 微信小程序直传腾讯云COS并对图片持久化文字水印案例
  2. 锁定计算机算qq在线吗,看对方qq上只显示“在线”两个字,是不是对方就是电脑在线?不是手机在线...
  3. 玩转ChatGPT:Auto-GPT项目部署与测评
  4. QTextEdit和QTextDocument(ZZ)
  5. 数据结构之字典树Trie
  6. 电影投资普通小白参与能获得多少分红?分红有规则吗?
  7. c语言long的用法及作用,c语言中long long的用法
  8. 【<HTTP专题>】
  9. Linux设定密码策略
  10. CTF-MD5之守株待兔,你需要找到和系统锁匹配的钥匙 WP