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最新面试题含答案,有兴趣可以点击获取. ...
随机推荐
- 奇怪吸引子---YuWang
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...
- how to read from __consumer_offsets topic
来自:http://grokbase.com/t/kafka/users/15bs2r0m83/kafka-0-8-2-1-how-to-read-from-consumer-offsets-topi ...
- Nodejs npm安装socket.io报错解决办法
安装socket.io时,报错,提示需要安装Microsoft visual studio 2005 或 Net framework 2.0 sdk,没有找到vcbuild.exe,解决办法是安装 . ...
- A Brief History of Scaling LinkedIn
原文地址 LinkedIn started in 2003 with the goal of connecting to your network for better job opportuniti ...
- 突然顿悟的Javascript中的this
一直对Javascript中的this都有一种似是而非的感觉,今天突然感觉豁然开朗,特此记录一下. 咱们先看个栗子: <!DOCTYPE html> <html> <he ...
- Windows 64位 安装Oracle instantclient 官方绿色版和PL/SQL Developer 总结
原文: http://blog.csdn.net/kimsoft/article/details/8751267 操作系统:Windows 7 64位旗舰 要求,安装PL/SQL Developer用 ...
- Hadoop - Azkaban 作业调度
1.概述 在调度 Hadoop 的相关作业时,有以下几种方式: 基于 Linux 系统级别的 Crontab. Java 应用级别的 Quartz. 第三方的调度系统. 自行开发 Hadoop 应用调 ...
- linux epoll 开发指南-【ffrpc源码解析】
摘要 关于epoll的问题很早就像写文章讲讲自己的看法,但是由于ffrpc一直没有完工,所以也就拖下来了.Epoll主要在服务器编程中使用,本文主要探讨服务器程序中epoll的使用技巧.Epoll一般 ...
- Hbase0.98.4/Hadoop2.4.1整合小结【原创】
设定hbase的数据目录,修改conf/hbase-site.xml <configuration> <property> <name>hbase.cluster. ...
- postgresql 获取刚刚插入的数据主键id
postgresql不支持last_insert_id()方法,恶心到啦: 不过还好它有其他的解决方案: 创建一个测试数据表: CREATE TABLE test.test18 ( id serial ...