初学编程 第一个小程序Android studio实现计算器功能
源代码下载: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. 制作计算输入框 2. 创建计算触发器 3. 创建数值输入触发器 4. 创建重置触发 ...
- android studio日历小程序,android studio无法加载日历界面
LayoutInflater inflater= (LayoutInflater) getApplicationContext().getSystemService(LAYOUT_INFLATER_S ...
- 微信小程序实现简单的计算器功能
wxml <view class='content'><input value='{{calculation}}'></input><view class=' ...
- 不用代码,10分钟打造属于自己的第一款小程序
扫码体验 早晨到公司的时候,手机上推送的小程序审核通过的消息,激动的下载了小程序的二维码,扫一扫即可在手机上打开上线的小程序,不枉费昨天晚上熬夜到凌晨,用免费平台测试的功夫 gh_098cec5701 ...
- c语言如何输入汉字_C语言入门的第一个小程序
大部分程序员入门的第一个小程序都是Hello World,还记得当时大一的时候,我室友还特意为了这个发了个说说,现在想起来好有意思,哈哈好了废话不多说,直接干. (PS:如果学过自动忽略) #incl ...
- 从0到一开发微信小程序(2)——开发第一个小程序
文章目录 其他相关文章 1.创建项目 2.小程序代码目录介绍 2.1.描述整体的app.* 2.2.描述各自页面的pages下面的目录 其他相关文章 从0到一开发微信小程序(1)--申请账号并安装开发 ...
- 微信小程序零基础入门_第一章 小程序和开发者工具的介绍
第一章 小程序和开发者工具的基本介绍 1.1 小程序的开发工具 微信小程序的开发者需要先通过微信公众平台注册开发者账号.在微信公众平台网页中的账号分类->小程序中有着较为详细的注册介绍,可以较为 ...
- 核桃编程学python吗_学编程要趁早?对话核桃编程X支付宝 “小程序编程马拉松”三强得主...
原标题:学编程要趁早?对话核桃编程X支付宝 "小程序编程马拉松"三强得主 来源:网络 浏览专业IT技术社区网站,创作沉浸式互动体验游戏,开发辟谣小程序......这并不是程序员大神 ...
- 省钱兄校园跑腿源码(公众号+APP+小程序+Android+IOS)校园跑腿社区跑腿同城跑腿任务兼职小程序uniapp前端模版
开源代码是用户端uniapp部分源码,使用hbuilder导入即可运行 只提供参考学习使用!已经获得软著!不可商业使用!感谢支持 h5体验地址 h5:https://paotui.xianmxkj.c ...
最新文章
- [iOS]开发者证书和描述文件的作用
- 程序员:今天你读了吗?
- mysql的acid_什么是数据库ACID?
- VC++中把一个对话框最小化到托盘
- excel运行最多行数
- 第三次学JAVA再学不好就吃翔(part44)--匿名内部类
- Python的内建属性和内建函数
- 最近很多面试都是考研凉凉的,心塞!
- 05DotNet基本常用类库
- 分析“关于Linux内核引入的accept_local参数的一个问题”
- 管理新语:别人反映问题,你要形成自己的材料
- [3-7]xp系统美化主题包下载每日更新【heizt整理】
- 常用的ASCII码值
- Python学习之Turtle库
- ANC主动降噪的量化描述
- 小米盒子2刷android tv,【二次搬运】小米盒子3S刷Android TV教程
- MySQL 的 max_allowed_packet
- 小学一年级语文心田花开各类词汇用法汇总
- 微信公众平台js算法逆向
- 魅族 刷机android 6.0,乐视X900+安卓6.0 魅族Flyme6刷机包 最新6.7.12.29R付费纯净版
热门文章
- 微信小程序直传腾讯云COS并对图片持久化文字水印案例
- 锁定计算机算qq在线吗,看对方qq上只显示“在线”两个字,是不是对方就是电脑在线?不是手机在线...
- 玩转ChatGPT:Auto-GPT项目部署与测评
- QTextEdit和QTextDocument(ZZ)
- 数据结构之字典树Trie
- 电影投资普通小白参与能获得多少分红?分红有规则吗?
- c语言long的用法及作用,c语言中long long的用法
- 【<HTTP专题>】
- Linux设定密码策略
- CTF-MD5之守株待兔,你需要找到和系统锁匹配的钥匙 WP