Android笔记(十六) 简易计算器
实现功能:
简单计算器
布局及美化
采用LinearLayout嵌套LinearLayout实现布局。
要求
1. 按钮所有文字居于右下角
2. 按钮为白色,点击变成橘色
3. 显示屏文字居右显示并且为橘色
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"> <!-- 显示屏组件 -->
<EditText
android:id="@+id/et_input"
android:layout_width="330dp"
android:layout_height="wrap_content"
android:editable="false"
android:gravity="right"
android:textColor="#ffbf16"/> <!-- 一个垂直线性布局,用来放置所有按钮 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp"
android:gravity="center_horizontal"
android:orientation="vertical"> <!-- 一个水平线性布局,用来放置C DEL ÷ × -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal"> <Button
android:id="@+id/btn_clear"
android:layout_width="75dp"
android:layout_height="75dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="C "
android:textSize="25sp" /> <Button
android:id="@+id/btn_del"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="DEL "
android:textSize="25sp" /> <Button
android:id="@+id/btn_divide"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="÷ "
android:textSize="25sp" /> <Button
android:id="@+id/btn_multiply"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="× "
android:textSize="25sp" /> </LinearLayout> <!-- 一个水平线性布局,用来放置7 8 9 - -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_horizontal"
android:orientation="horizontal"> <Button
android:id="@+id/btn_7"
android:layout_width="75dp"
android:layout_height="75dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="7 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_8"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="8 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_9"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="9 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_minus"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="- "
android:textSize="25sp" />
</LinearLayout> <!-- 一个水平线性布局,用来放置4 5 6 7 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_horizontal"
android:orientation="horizontal"> <Button
android:id="@+id/btn_4"
android:layout_width="75dp"
android:layout_height="match_parent"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="4 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_5"
android:layout_width="75dp"
android:layout_height="75dp" android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="5 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_6"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="6 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_sum"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="+ "
android:textSize="25sp" />
</LinearLayout> <!-- 一个水平布局,用来放置剩余按钮 -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"> <!-- 一个垂直布局,用来放置1 2 3 0 . 按钮 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <!-- 一个水平布局,用来放置1 2 3 按钮 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal"> <Button
android:id="@+id/btn_1"
android:layout_width="75dp"
android:layout_height="75dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="1 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_2"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="2 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_3"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="3 "
android:textSize="25sp" />
</LinearLayout> <!-- 一个水平布局,用来放置0 . 按钮 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:gravity="center_horizontal"
android:orientation="horizontal"> <Button
android:id="@+id/btn_0"
android:layout_width="160dp"
android:layout_height="75dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="0 "
android:textSize="25sp" /> <Button
android:id="@+id/btn_point"
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_marginLeft="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text=". "
android:textSize="25sp" />
</LinearLayout>
</LinearLayout> <Button
android:id="@+id/btn_equal"
android:layout_width="75dp"
android:layout_height="160dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:background="@drawable/white_btn_selector"
android:gravity="right|bottom"
android:text="= "
android:textSize="25sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
white_btn_selector.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_selected="true" android:drawable="@drawable/orange"/>
<item android:state_focused="true" android:drawable="@drawable/orange" />
<item android:state_pressed="true" android:drawable="@drawable/orange" />
<item android:drawable="@drawable/white"/> </selector>
orange.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffbf20"/>
</shape>
white.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff"/>
<corners android:radius="2.0dp" />
</shape>
运行结果:
逻辑实现
MainActivity.java
package cn.lixyz.counterdemo; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity implements View.OnClickListener { Button btn_0; //0数字按钮
Button btn_1; //1数字按钮
Button btn_2; //2数字按钮
Button btn_3; //3数字按钮
Button btn_4; //4数字按钮
Button btn_5; //5数字按钮
Button btn_6; //6数字按钮
Button btn_7; //7数字按钮
Button btn_8; //8数字按钮
Button btn_9; //9数字按钮
Button btn_point; //小数点按钮
Button btn_clear; //clear数字按钮
Button btn_del; //delete数字按钮
Button btn_sum; //加按钮
Button btn_minus; //减按钮
Button btn_multiply; //乘按钮
Button btn_divide; //除按钮
Button btn_equal; //等于按钮 String[] arr = new String[]{"+", "-", "×", "÷"}; EditText et_input;//显示屏 boolean clear_flag = true;//清空标识 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//实例化按钮
btn_0 = (Button) findViewById(R.id.btn_0);
btn_1 = (Button) findViewById(R.id.btn_1);
btn_2 = (Button) findViewById(R.id.btn_2);
btn_3 = (Button) findViewById(R.id.btn_3);
btn_4 = (Button) findViewById(R.id.btn_4);
btn_5 = (Button) findViewById(R.id.btn_5);
btn_6 = (Button) findViewById(R.id.btn_6);
btn_7 = (Button) findViewById(R.id.btn_7);
btn_8 = (Button) findViewById(R.id.btn_8);
btn_9 = (Button) findViewById(R.id.btn_9);
btn_multiply = (Button) findViewById(R.id.btn_multiply);
btn_point = (Button) findViewById(R.id.btn_point);
btn_clear = (Button) findViewById(R.id.btn_clear);
btn_del = (Button) findViewById(R.id.btn_del);
btn_sum = (Button) findViewById(R.id.btn_sum);
btn_minus = (Button) findViewById(R.id.btn_minus);
btn_divide = (Button) findViewById(R.id.btn_divide);
btn_equal = (Button) findViewById(R.id.btn_equal); //实例化显示屏
et_input = (EditText) findViewById(R.id.et_input); //设置这些按钮的点击事件
btn_0.setOnClickListener(this);
btn_1.setOnClickListener(this);
btn_2.setOnClickListener(this);
btn_3.setOnClickListener(this);
btn_4.setOnClickListener(this);
btn_5.setOnClickListener(this);
btn_6.setOnClickListener(this);
btn_7.setOnClickListener(this);
btn_8.setOnClickListener(this);
btn_9.setOnClickListener(this);
btn_multiply.setOnClickListener(this);
btn_point.setOnClickListener(this);
btn_clear.setOnClickListener(this);
btn_del.setOnClickListener(this);
btn_sum.setOnClickListener(this);
btn_minus.setOnClickListener(this);
btn_divide.setOnClickListener(this);
btn_equal.setOnClickListener(this); } @Override
public void onClick(View v) {
//获取目前显示屏上显示的数字,因为为了美观,在布局时,Text属性添加了空格,所以在获取到按钮内容之后,需要去掉空格
String str = et_input.getText().toString(); switch (v.getId()) {
//如果点击的是0~9或者小数点,直接累加到屏幕上
case R.id.btn_0:
case R.id.btn_1:
case R.id.btn_2:
case R.id.btn_3:
case R.id.btn_4:
case R.id.btn_5:
case R.id.btn_6:
case R.id.btn_7:
case R.id.btn_8:
case R.id.btn_9:
case R.id.btn_point:
case R.id.btn_sum:
case R.id.btn_minus:
case R.id.btn_divide:
case R.id.btn_multiply:
//因为传入的是一个View对象,所以需要强制转换为Button对象,才能使用getText()方法
if (clear_flag) {
et_input.setText(str + ((Button) v).getText());
} else {
et_input.setText(((Button) v).getText());
clear_flag = true;
}
Log.d("TEST", ((Button) v).getText().toString() + " " + clear_flag + "");
break;
//如果点击的是C,则将显示屏设置为空
case R.id.btn_clear:
et_input.setText("");
break;
//如果点击的是DEL,如果显示屏不为空,则将显示屏的内容最后一个字符去掉
case R.id.btn_del:
if (str != null && !str.equals("")) {
et_input.setText(et_input.getText().toString().substring(0, str.length() - 1));
}
break;
//如果点击的是等号,则进行运算,判断显示屏上的内容是否存在运算,如果不存在,直接显示当前文字,如果存在运算,进行运算,显示结果
case R.id.btn_equal:
for (int i = 0; i <= arr.length-1; i++) {
if (et_input.getText().toString().contains(arr[i])) {
getResult(et_input.getText().toString());
break;
}
}
// et_input.setText(str);
clear_flag = false;
break;
}
} //运算方法
public void getResult(String string) {
Log.d("TEST", string);
String[] arr2;
Double d1;
Double d2;
if (string.contains("+")) {
arr2 = string.split("\\+");
if (arr2[0].trim().length() == 0) {
d1 = 0.0;
} else {
d1 = Double.parseDouble(arr2[0].replace(" ", ""));
} if (arr2[1].trim().length() == 0) {
d2 = d1;
} else {
d2 = Double.parseDouble(arr2[1].replace(" ", ""));
}
et_input.setText((d1 + d2) + ""); } else if (string.contains("-")) { arr2 = string.split("\\-");
if (arr2[0].trim().length() == 0) {
d1 = 0.0;
} else {
d1 = Double.parseDouble(arr2[0].replace(" ", ""));
} if (arr2[1].trim().length() == 0) {
d2 = d1;
} else {
d2 = Double.parseDouble(arr2[1].replace(" ", ""));
}
et_input.setText((d1 - d2) + ""); } else if (string.contains("×")) {
arr2 = string.split("\\×");
if (arr2[0].trim().length() == 0) {
d1 = 0.0;
} else {
d1 = Double.parseDouble(arr2[0].replace(" ", ""));
} if (arr2[1].trim().length() == 0) {
d2 = d1;
} else {
d2 = Double.parseDouble(arr2[1].replace(" ", ""));
}
et_input.setText((d1 * d2) + "");
} else if (string.contains("÷")) {
arr2 = string.split("\\÷");
if (arr2[0].trim().length() == 0) {
d1 = 0.0;
} else {
d1 = Double.parseDouble(arr2[0].replace(" ", ""));
} if (arr2[1].trim().length() == 0) {
d2 = d1;
} else {
d2 = Double.parseDouble(arr2[1].replace(" ", ""));
}
if (d2 == 0) {
et_input.setText("除数不能为0");
} else {
et_input.setText((d1 / d2) + "");
}
}
}
}
Android笔记(十六) 简易计算器的更多相关文章
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
- (C/C++学习笔记) 十六. 预处理
十六. 预处理 ● 关键字typeof 作用: 为一个已有的数据类型起一个或多个别名(alias), 从而增加了代码的可读性. typedef known_type_name new_type_nam ...
- Android笔记(六十)Android总结:四大组件——BroadcastReceiver篇
什么是BroadcastReceiver BroadcastReceiver是Android体系的四大组件之一,本质上是一种全局的监听器,用于监听系统全局的广播消息,正式因为其本质为全局监听,因此可以 ...
- Unity 游戏框架搭建 2019 (四十六) 简易消息机制 & 集成到 MonoBehaviourSimplify 里
在上一篇,我们接触了单例,使用单例解决了我们脚本之间访问的问题. 脚本之间访问其实有更好的方式. 我们先分下脚本访问脚本的几种形式. 第一种,A GameObject 是 B GameObject 的 ...
- Android入门(十六)调用摄像头相册
原文链接:http://www.orlion.ga/665/ 一.调用摄像头 创建一个项目ChoosePicDemo,修改activity_main.xml: <LinearLayout xml ...
- Android进阶(十六)子线程调用Toast报Can't create handler inside thread that has not called Looper.prepare() 错误
原子线程调用Toast报Can't create handler inside thread that has not called Looper.prepare() 错误 今天用子线程调Toast报 ...
- SpringBoot笔记十六:ElasticSearch
目录 ElasticSearch官方文档 ElasticSearch安装 ElasticSearch简介 ElasticSearch操作数据,RESTful风格 存储 检查是否存在 删除 查询 更新 ...
- Android笔记(六):线程及线程通信
线程 由于Android的Activity中默认所有代码都在主线程(UI线程)中执行,如果在这里面执行耗时任务(例如下载),界面就会无反应且不可操作,直到耗时任务执行完毕. 如果想在执行耗时任务的同时 ...
- Android笔记(六十一)动态添加组件
想要一个功能,点击按钮,可以在已有的布局上,新添加一组组件. 动态的创建组件,本质上还是创建组件,只不过是在程序中根据逻辑来创建.大致步骤是找到要创建控件的位置,然后将要创建的组件添加进去. 看代码: ...
- Android笔记(六) Android中的组件
一个软件可以吸引到用户,除了优秀的功能可以解决用户的问题之外,良好的用户界面也并不可少.一个软件的功能不管多么优秀,但是没有提供友好的界面来让用户操作,将很难吸引到最终用户. Android提供了大量 ...
随机推荐
- 【438】Python 处理文件
1. 读取文件,计算 tweets 数目 python中readline判断文件读取结束的方法 line == '' python:如何检查一行是否为空行 line == '\n' or line = ...
- EC11编码器的使用方法
1. EC11编码器的原理图如下 2. 旋转的时候,波形如下,EC11转1格,产生一个上升沿的中断,思路就是检测AX4-1的上升沿中断(平时是低电平),进入中断服务函数,检测AX4-2的电平,低电平逆 ...
- Ubuntu与Window双系统安装的注意事项
UBUNTU与WINDOW双系统安装的注意事项 Ubuntu与Window双系统安装的注意事项 由 匿名 (未验证) 提交于 2019-05-18 10:07:41 登录 发表评论 29 次浏览 ...
- [BJOI2019] 奥术神杖 [取log+AC自动机+dp]
题面 传送门 思路 首先,看到这个乘起来开根号的形式,应该能想到用取$\log$的方式做一个转化: $\sqrt[n]{\prod_i a_i}=\frac{1}{n}\sum_i \log_b a_ ...
- jquery设置滚动条样式
HTML结构 下面是该滚动条插件工作所必须的HTML结构: <div id="about" class="nano"> <div cl ...
- 19暑假多校训练第一场-J-Fraction Comparision(大数运算)
链接:https://ac.nowcoder.com/acm/contest/881/J来源:牛客网 题目描述 Bobo has two fractions xaxa and ybyb. He wan ...
- linux环境下编写shell脚本实现启动停止tomcat服务
第一步:以管理员的身份进入控制台,在指定目录下新建一个shell脚本,我这里命名为tomcat.sh 第二步:编写shell脚本 #!/bin/bash tomcat_home=/usr/tomcat ...
- Python-05-字符串格式化
一.百分号方式 %[(name)][flags][width].[precision]typecode (name) 可选,用于选择指定的key flags 可选,可供选择 ...
- 【HC89S003F4开发板】9ASM写定时器1
HC89S003F4开发板ASM写定时器1 一.实现过程 1.外部寄存器设置 扩展 XSFR 采用和 XRAM 同样的访问方式,使用 MOVX A, @DPTR 和 MOVX @DPTR ,A 来进行 ...
- DBA职责和任务
DBA守则在对生产环境进行修改前,一定要进行备份,一定要在测试环境进行测试,否则不要进行轻易的更改一次尽量只做一件事,不要受环境影响 DBA的十大任务1.了解和掌握硬件环境2.规划数据库3.安装数据库 ...