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最新面试题含答案,有兴趣可以点击获取. ...
随机推荐
- DRAM 内存介绍(二)
参考资料:http://www.anandtech.com/show/3851/everything-you-always-wanted-to-know-about-sdram-memory-but- ...
- samba4.1.9安装
./configure \ --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --with-piddir=/run/samba \ ...
- Codeforces Round #384 (Div. 2)D - Chloe and pleasant prizes 树形dp
D - Chloe and pleasant prizes 链接 http://codeforces.com/contest/743/problem/D 题面 Generous sponsors of ...
- ecshop 进入后台登录帐号出现乱码解决方法
进入后台登录帐号出现如果生成乱码 MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Err ...
- 防抖(Debounce)与节流( throttle)区别
http://www.cnblogs.com/ShadowLoki/p/3712048.html http://blog.csdn.net/tina_ttl/article/details/51830 ...
- Spring3系列12- Spring AOP AspectJ
Spring3系列12- Spring AOP AspectJ 本文讲述使用AspectJ框架实现Spring AOP. 再重复一下Spring AOP中的三个概念, Advice:向程序内部注入的代 ...
- smdkv210
参考:http://code.google.com/p/libyuv/issues/detail?id=295 ******************************************** ...
- FastSocket客户端/服务端通讯示例
新建控制台项目,命名为Server 添加FastSocket.SocketBase,FastSocket.Server引用 Socket命令服务类: Sodao.FastSocket.Server ...
- Jquery实现ready()的源码
function bindReady(){ if ( readyBound ) return; readyBound = true; // Mozilla, Opera and webkit nigh ...
- 编译安装 LLVM
本文记录 LLVM 的安装过程,比较繁琐,使用 LLVM 3.4 操作系统:CentOS 6.6 64 位 1. 下载需要的软件 相关软件下载地址:http://llvm.org/releases/d ...