Android 简单计算器源码....
PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧...
顺便去对比了一下别人写的代码...有的使用到了集合框架去实现,我却是用的数组,相比之下实在是有点弱爆了...sad....自己还需要努力啊...
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/calculator"
android:background="#ffffffff"
android:orientation="vertical"
>
<!-- cursorVisible:表示光标可见..
1280*800分辨率..
-->
<EditText
android:id="@+id/et_show"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="right|center_vertical"
android:cursorVisible="false"
android:layout_marginTop="4dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:hint="@string/et_show"
android:layout_gravity="center"
android:singleLine="true"
android:textSize="25sp"
android:textColor="#000000"
android:layout_weight="1"/>
<TableLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tablelayout"
android:layout_weight="10"
android:layout_marginTop="4dp">
<LinearLayout
android:id="@+id/linerlayout"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<Button
android:id="@+id/clears"
android:layout_width="60dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:textSize="25sp"
android:text="@string/clears"/>
<Button
android:id="@+id/clearAll"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:text="@string/clearAll"
android:textSize="25sp"
android:layout_weight="1"/>
</LinearLayout>
<TableRow
android:id="@+id/row_1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button
android:id="@+id/btn_1"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_1"
android:textSize="25sp"
/>
<Button
android:id="@+id/btn_2"
android:layout_height="fill_parent"
android:layout_width="40dip"
android:layout_weight="1"
android:text="@string/btn_2"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_3"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_3"
android:textSize="20sp"
/>
<Button
android:id="@+id/btn_add"
android:layout_width="40dip"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_add"
android:textSize="25sp"/>
</TableRow>
<TableRow
android:id="@+id/row2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button
android:id="@+id/btn_4"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:text="@string/btn_4"
android:textSize="25sp"
android:layout_weight="1"/>
<Button
android:id="@+id/btn_5"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:text="@string/btn_5"
android:textSize="25sp"
android:layout_weight="1"/>
<Button
android:id="@+id/btn_6"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:text="@string/btn_6"
android:textSize="25sp"
android:layout_weight="1"/>
<Button
android:id="@+id/btn_sub"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:text="@string/btn_sub"
android:textSize="25sp"
android:layout_weight="1"/>
</TableRow>
<TableRow
android:id="@+id/row_3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button
android:id="@+id/btn_7"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_7"
android:textSize="25sp"
/>
<Button
android:id="@+id/btn_8"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_8"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_9"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_9"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_mlt"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_mlt"
android:textSize="25sp"/>
</TableRow>
<TableRow
android:id="@+id/row_4"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button
android:id="@+id/btn_0"
android:layout_height="fill_parent"
android:layout_width="40dp"
android:layout_weight="1"
android:text="@string/btn_0"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_spot"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_spot"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_tan"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_tan"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_div"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_div"
android:textSize="25sp"/>
</TableRow>
<TableRow
android:id="@+id/row_5"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button
android:id="@+id/btn_square"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_square"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_sqrt"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_sqrt"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_sin"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_sin"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_cos"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_cos"
android:textSize="25sp"/>
</TableRow>
<TableRow
android:id="@+id/row_6"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<Button
android:id="@+id/btn_cot"
android:layout_width="60dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_cot"
android:textSize="25sp"/>
<Button
android:id="@+id/btn_equal"
android:layout_width="40dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="@string/btn_equal"
android:textSize="25sp"/>
</TableRow>
</TableLayout>
</LinearLayout>
上面这个就是布局文件了...这个布局在不同的分辨率的屏幕上,显示是有所区别的...不过应该差别不是很大.....
接着就是src下的MainActivity文件了....注释掉的地方,大家可以直接略过....今天再次优化了一下,上次的代码有点冗余....
package com.example.android_calculator; import java.lang.annotation.Target; import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.OnClick;
import android.widget.EditText; public class MainActivity extends Activity { String str = "";
double result = 0, num1 = 0, num2 = 0;
int sign = 0, flag = 0;
View vi;
EditText et_show;
Button but_num[] = new Button[10];
Button but_mark[] = new Button[14]; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_show = (EditText) findViewById(R.id.et_show);
et_show.setKeyListener(null);
int i;
int j;
int[] btn_id = new int[] { R.id.btn_add, R.id.btn_sub, R.id.btn_mlt,
R.id.btn_div, R.id.btn_equal, R.id.btn_spot, R.id.btn_sin,
R.id.btn_cos, R.id.btn_tan, R.id.btn_cot, R.id.btn_square,
R.id.btn_sqrt, R.id.clears, R.id.clearAll };
for (i = 0; i < but_num.length; i++) {
String btnid = "btn" + "_" + i;
int resID = getResources().getIdentifier(btnid, "id",
"com.example.android_calculator");
but_num[i] = (Button) findViewById(resID);
but_num[i].setOnClickListener(new onclicklistener());
}
for (j = 0; j < but_mark.length; j++) {
but_mark[j] = (Button) findViewById(btn_id[j]);
but_mark[j].setOnClickListener(new onclicklistener());
}
} public double calculater() {
switch (sign) {
case 0:
result = num2;
break;
case 1:
result = num1 + num2;
break;
case 2:
result = num1 - num2;
break;
case 3:
result = num1 * num2;
break;
case 4:
result = num1 / num2;
break;
}
num1 = result;
sign = 0;
return result;
} public void click_num(int num) {
int o = 0;
if (num == 0) {
if (flag == 1) {
str = "";
str += 0;
et_show.setText(str);
flag = 0;
} else {
char ch1[];
ch1 = str.toCharArray();
if (!(ch1.length == 1 && ch1[0] == '0')) {
str += 0;
et_show.setText(str);
}
}
} else {
for (o = 1; o < 10; o++) {
if (o == num) {
if (flag == 1) {
str = "";
str += o;
et_show.setText(str);
flag=0;
}else{
str+=o;
et_show.setText(str);
}
}
}
}
}
public void click_mark(int num, View vv){
if(str!=""){
if(vi==but_mark[num]){
sign=num+1;
}else{
num2=Double.parseDouble(str);
calculater();
str=""+result;
et_show.setText(str);
sign=num+1;
flag=1;
vi=vv;
}
}
}
class onclicklistener implements OnClickListener {
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_0: {
click_num(0);
vi = v;
break;
}
case R.id.btn_1: {
click_num(1);
vi = v;
break;
}
case R.id.btn_2: {
click_num(2);
vi = v;
break;
}
case R.id.btn_3: {
click_num(3);
vi = v;
break;
}
case R.id.btn_4: {
click_num(4);
vi = v;
break;
}
case R.id.btn_5: {
click_num(5);
vi = v;
break;
}
case R.id.btn_6: {
click_num(6);
vi = v;
break;
}
case R.id.btn_7: {
click_num(7);
vi = v;
break;
}
case R.id.btn_8: {
click_num(8);
vi = v;
break;
}
case R.id.btn_9: {
click_num(9);
vi = v;
break;
}
case R.id.btn_add: {
click_mark(0,v);
break;
}
case R.id.btn_sub: {
click_mark(1,v);
break;
}
case R.id.btn_mlt: {
click_mark(2,v);
break;
}
case R.id.btn_div: {
click_mark(3,v);
break;
}
case R.id.btn_spot: {
str = str + ".";
et_show.setText(str);
break;
}
case R.id.btn_equal: {
if (str != "" && vi != but_mark[0] && vi != but_mark[1]
&& vi != but_mark[2] && vi != but_mark[3]) {
num2 = Double.parseDouble(str);
calculater();
str = "" + result;
et_show.setText(str);
flag = 1;
vi = v;
}
break;
}
case R.id.btn_sqrt: {
if (str != "") {
num2 = Double.parseDouble(str);
result = Math.sqrt(num2);
str = "" + result;
et_show.setText(str);
}
break;
}
case R.id.btn_square: {
if (str != "") {
num2 = Double.parseDouble(str);
result = num2 * num2;
str = "" + result;
et_show.setText(str);
}
break;
}
case R.id.btn_sin: {
if (str != "") {
num2 = Double.parseDouble(str);
result = Math.sin(num2);
str = "" + result;
et_show.setText(str);
}
break;
}
case R.id.btn_cos: {
if (str != "") {
num2 = Double.parseDouble(str);
result = Math.cos(num2);
str = "" + result;
et_show.setText(str);
}
break;
}
case R.id.btn_tan: {
if (str != "") {
num2 = Double.parseDouble(str);
result = Math.tan(num2);
str = "" + result;
et_show.setText(str);
}
break;
}
case R.id.btn_cot: {
if (str != "") {
num2 = Double.parseDouble(str);
result = (1 / Math.tan(num2));
str = "" + result;
et_show.setText(str);
}
break;
}
case R.id.clears: {
str = "";
et_show.setText(str);
vi = v;
break;
}
case R.id.clearAll: {
num1 = 0.0;
num2 = 0;
result = 0.0;
str = "";
et_show.setText(str);
}
}
}
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
menu.add(0, 1, 1, "退出");
return super.onCreateOptionsMenu(menu);
} public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == 1) {
finish();
}
return super.onOptionsItemSelected(item);
}
}
这里我注释掉的地方大家是不用看的...因为原本我是打算使用开源框架butterknife去实现findViewById()方法...觉得那样做会稍微的减少一下代码的书写量...但是没有实现成功,虽然是界面可以成功的显示,但是所有的按钮都无法被触发监听...如果有哪位大神明白的,请您指教我一下,小弟将感激不尽...
然后就是string.xml文件了.....
<?xml version="1.0" encoding="utf-8"?>
<resources> <string name="app_name">Android_calculator</string>
<string name="menu_settings">退出</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
<string name="et_show">show</string>
<string name="clears">C</string>
<string name="clearAll">清除</string>
<string name="btn_1">1</string>
<string name="btn_2">2</string>
<string name="btn_3">3</string>
<string name="btn_add">+</string>
<string name="btn_4">4</string>
<string name="btn_5">5</string>
<string name="btn_6">6</string>
<string name="btn_sub">-</string>
<string name="btn_7">7</string>
<string name="btn_8">8</string>
<string name="btn_9">9</string>
<string name="btn_mlt">*</string>
<string name="btn_0">0</string>
<string name="btn_spot">.</string>
<string name="btn_equal">=</string>
<string name="btn_div">/</string>
<string name="btn_square">x^2</string>
<string name="btn_sqrt">√x</string>
<string name="btn_sin">sin</string>
<string name="btn_cos">cos</string>
<string name="btn_tan">tan</string>
<string name="btn_cot">cot</string>
</resources>
这个文件相对就比较简单了....没什么过多的东西...下面这个是我自己源代码的全地址...很简单的东西....
http://files.cnblogs.com/files/RGogoing/Android_calculator.zip
再发一个高端的....这个用到了集合框架...写的挺好的....相比之下我上面那个就是个渣渣...
http://files.cnblogs.com/files/RGogoing/fxmjsjym_a5.zip
Android 简单计算器源码....的更多相关文章
- c 语言简单计算器源码
// main.c // 计算器 // Created by qianfeng on 14-7-15. // Copyright (c) 2014年 ___FGY___. All rights ...
- 【转】Android 4.3源码的下载和编译环境的安装及编译
原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html 告诉windows用户一个不好的消息,windows环境下没法 ...
- Android 开源项目源码解析(第二期)
Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations ...
- android仿漫画源码、抽奖转盘、Google相册、动画源码等
Android精选源码 android实现仿今日头条的开源项目 波浪效果,实现流量的动态显示 美妆领域的app, 集成了摄像头取色, 朋友圈, 滤镜等 android仿漫画源码 android一个视差 ...
- android狼人杀源码,桌面源码,猎豹快切源码
Android精选源码 android实现狼人杀app源码 android实现精心打造的Android基础框架源码 android热门电影的客户端源码 android 实现桌面的Launcher源码 ...
- android企业级商城源码、360°全景图VR源码、全民直播源码等
Android精选源码 [新版]Android技术博客精华汇总 开源了:乐乐音乐5.0-Android音乐播放器 android实现仿真水波纹效果源码 360°全景图VR,这是一个值得把玩的APP a ...
- Ubantu16.04进行Android 8.0源码编译
参考这篇博客 经过测试,8.0源码下载及编译之后,占用100多G的硬盘空间,尽量给ubantu系统多留一些硬盘空间,如果后续需要在编译好的源码上进行开发,需要预留更多的控件,为了防止后续出现文件权限问 ...
- 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...
- 史上最详细的Android消息机制源码解析
本人只是Android菜鸡一个,写技术文章只是为了总结自己最近学习到的知识,从来不敢为人师,如果里面有不正确的地方请大家尽情指出,谢谢! 606页Android最新面试题含答案,有兴趣可以点击获取. ...
随机推荐
- zz 圣诞丨太阁所有的免费算法视频资料整理
首发于 太阁实验室 关注专栏 写文章 圣诞丨太阁所有的免费算法视频资料整理 Ray Cao· 12 小时前 感谢大家一年以来对太阁实验室的支持,我们特地整理了在过去一年中我们所有的原创算法 ...
- easy datagrid 按钮控制
onBeforeLoad : function() {// 这里是紧接着你的修改按钮的 // 注意ID为你初始化工具栏按钮对应的ID var adminid=<%=Admin_Id%>+' ...
- checkbox的三种状态处理
checkbox只有两种值:选中(checked)或未选中(unchecked).它可以有任何值,但是表单提交时checkbox的值只能是checked或unchecked.它的默认值是uncheck ...
- 关于 MySQL 的 boolean 和 tinyint(1)
boolean类型MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),MySQL里有四个常量:true,false,TRUE, ...
- zookeeper Watcher API 说明
Watcher 在 ZooKeeper 是一个核心功能,Watcher 可以监控目录节点的数据变化以及子目录的变化,一旦这些状态发生变化,服务器就会通知所有设置在这个目录节点上的 Watcher,从而 ...
- js笔记--1
1.创建一个layer层 var GameLayer = cc.Layer.extend({ _time:null, _ship:null, _backSky:null, // 构造函数 ctor:f ...
- 如何提高nodejs程序的稳定性,健壮性
在网上看到一些帖子,吐糟,质疑nodejs 程序的稳定性,为什么呢?其一,可能这个和javascript有关吧,node是拿javascript去实现的,而javascript又被称为是“世界上误解最 ...
- 连接的世界 - LTE时代产业趋势和战略分析
连接的世界 - LTE时代产业趋势和战略分析 作者:华为有线技术公司李常伟 2014-09-22 信息产业发展解放的核心是这个世界连接的方式.由语音到数据.由通信到情感.由人的连接到物的连接.由“哑” ...
- Window Server IIS6.0部署webservice请求调用提示请求失败
在一台window server 2003机器上部署了一个webservice,iis为6.0,奇怪的是.在服务器本机调用webservice成功了,可是在其它client调用却反馈失败.详细什么原因 ...
- 苹果 Mac OS 下查看系统隐藏文件
Mac OS X中有很多系统隐藏的信息文件, 一般在Finder中都是看不到,也修改不了的. 但通过在"终端"中输入命令, 就可以在Finder中显示出来: defaults wr ...