PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧...

    顺便去对比了一下别人写的代码...有的使用到了集合框架去实现,我却是用的数组,相比之下实在是有点弱爆了...sad....自己还需要努力啊...

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:id="@+id/calculator"
  5. android:background="#ffffffff"
  6. android:orientation="vertical"
  7. >
  8. <!-- cursorVisible:表示光标可见..
  9. 1280*800分辨率..
  10. -->
  11. <EditText
  12. android:id="@+id/et_show"
  13. android:layout_width="fill_parent"
  14. android:layout_height="wrap_content"
  15. android:gravity="right|center_vertical"
  16. android:cursorVisible="false"
  17. android:layout_marginTop="4dp"
  18. android:layout_marginLeft="4dp"
  19. android:layout_marginRight="4dp"
  20. android:hint="@string/et_show"
  21. android:layout_gravity="center"
  22. android:singleLine="true"
  23. android:textSize="25sp"
  24. android:textColor="#000000"
  25. android:layout_weight="1"/>
  26. <TableLayout
  27. android:layout_width="fill_parent"
  28. android:layout_height="wrap_content"
  29. android:id="@+id/tablelayout"
  30. android:layout_weight="10"
  31. android:layout_marginTop="4dp">
  32. <LinearLayout
  33. android:id="@+id/linerlayout"
  34. android:layout_width="fill_parent"
  35. android:layout_height="wrap_content"
  36. android:layout_weight="1">
  37. <Button
  38. android:id="@+id/clears"
  39. android:layout_width="60dip"
  40. android:layout_height="fill_parent"
  41. android:layout_weight="1"
  42. android:textSize="25sp"
  43. android:text="@string/clears"/>
  44. <Button
  45. android:id="@+id/clearAll"
  46. android:layout_width="40dip"
  47. android:layout_height="fill_parent"
  48. android:text="@string/clearAll"
  49. android:textSize="25sp"
  50. android:layout_weight="1"/>
  51. </LinearLayout>
  52. <TableRow
  53. android:id="@+id/row_1"
  54. android:layout_width="fill_parent"
  55. android:layout_height="fill_parent"
  56. android:layout_weight="1">
  57. <Button
  58. android:id="@+id/btn_1"
  59. android:layout_width="40dip"
  60. android:layout_height="fill_parent"
  61. android:layout_weight="1"
  62. android:text="@string/btn_1"
  63. android:textSize="25sp"
  64. />
  65. <Button
  66. android:id="@+id/btn_2"
  67. android:layout_height="fill_parent"
  68. android:layout_width="40dip"
  69. android:layout_weight="1"
  70. android:text="@string/btn_2"
  71. android:textSize="25sp"/>
  72. <Button
  73. android:id="@+id/btn_3"
  74. android:layout_width="40dp"
  75. android:layout_height="fill_parent"
  76. android:layout_weight="1"
  77. android:text="@string/btn_3"
  78. android:textSize="20sp"
  79. />
  80. <Button
  81. android:id="@+id/btn_add"
  82. android:layout_width="40dip"
  83. android:layout_height="fill_parent"
  84. android:layout_weight="1"
  85. android:text="@string/btn_add"
  86. android:textSize="25sp"/>
  87. </TableRow>
  88. <TableRow
  89. android:id="@+id/row2"
  90. android:layout_width="fill_parent"
  91. android:layout_height="fill_parent"
  92. android:layout_weight="1">
  93. <Button
  94. android:id="@+id/btn_4"
  95. android:layout_width="40dp"
  96. android:layout_height="fill_parent"
  97. android:text="@string/btn_4"
  98. android:textSize="25sp"
  99. android:layout_weight="1"/>
  100. <Button
  101. android:id="@+id/btn_5"
  102. android:layout_width="40dp"
  103. android:layout_height="fill_parent"
  104. android:text="@string/btn_5"
  105. android:textSize="25sp"
  106. android:layout_weight="1"/>
  107. <Button
  108. android:id="@+id/btn_6"
  109. android:layout_width="40dp"
  110. android:layout_height="fill_parent"
  111. android:text="@string/btn_6"
  112. android:textSize="25sp"
  113. android:layout_weight="1"/>
  114. <Button
  115. android:id="@+id/btn_sub"
  116. android:layout_width="40dp"
  117. android:layout_height="fill_parent"
  118. android:text="@string/btn_sub"
  119. android:textSize="25sp"
  120. android:layout_weight="1"/>
  121. </TableRow>
  122. <TableRow
  123. android:id="@+id/row_3"
  124. android:layout_width="fill_parent"
  125. android:layout_height="fill_parent"
  126. android:layout_weight="1">
  127. <Button
  128. android:id="@+id/btn_7"
  129. android:layout_width="40dp"
  130. android:layout_height="fill_parent"
  131. android:layout_weight="1"
  132. android:text="@string/btn_7"
  133. android:textSize="25sp"
  134. />
  135. <Button
  136. android:id="@+id/btn_8"
  137. android:layout_width="40dp"
  138. android:layout_height="fill_parent"
  139. android:layout_weight="1"
  140. android:text="@string/btn_8"
  141. android:textSize="25sp"/>
  142. <Button
  143. android:id="@+id/btn_9"
  144. android:layout_width="40dp"
  145. android:layout_height="fill_parent"
  146. android:layout_weight="1"
  147. android:text="@string/btn_9"
  148. android:textSize="25sp"/>
  149. <Button
  150. android:id="@+id/btn_mlt"
  151. android:layout_width="40dp"
  152. android:layout_height="fill_parent"
  153. android:layout_weight="1"
  154. android:text="@string/btn_mlt"
  155. android:textSize="25sp"/>
  156. </TableRow>
  157. <TableRow
  158. android:id="@+id/row_4"
  159. android:layout_width="fill_parent"
  160. android:layout_height="fill_parent"
  161. android:layout_weight="1">
  162. <Button
  163. android:id="@+id/btn_0"
  164. android:layout_height="fill_parent"
  165. android:layout_width="40dp"
  166. android:layout_weight="1"
  167. android:text="@string/btn_0"
  168. android:textSize="25sp"/>
  169. <Button
  170. android:id="@+id/btn_spot"
  171. android:layout_width="40dp"
  172. android:layout_height="fill_parent"
  173. android:layout_weight="1"
  174. android:text="@string/btn_spot"
  175. android:textSize="25sp"/>
  176. <Button
  177. android:id="@+id/btn_tan"
  178. android:layout_width="40dp"
  179. android:layout_height="fill_parent"
  180. android:layout_weight="1"
  181. android:text="@string/btn_tan"
  182. android:textSize="25sp"/>
  183. <Button
  184. android:id="@+id/btn_div"
  185. android:layout_width="40dp"
  186. android:layout_height="fill_parent"
  187. android:layout_weight="1"
  188. android:text="@string/btn_div"
  189. android:textSize="25sp"/>
  190. </TableRow>
  191. <TableRow
  192. android:id="@+id/row_5"
  193. android:layout_width="fill_parent"
  194. android:layout_height="fill_parent"
  195. android:layout_weight="1">
  196. <Button
  197. android:id="@+id/btn_square"
  198. android:layout_width="40dp"
  199. android:layout_height="fill_parent"
  200. android:layout_weight="1"
  201. android:text="@string/btn_square"
  202. android:textSize="25sp"/>
  203. <Button
  204. android:id="@+id/btn_sqrt"
  205. android:layout_width="40dp"
  206. android:layout_height="fill_parent"
  207. android:layout_weight="1"
  208. android:text="@string/btn_sqrt"
  209. android:textSize="25sp"/>
  210. <Button
  211. android:id="@+id/btn_sin"
  212. android:layout_width="40dp"
  213. android:layout_height="fill_parent"
  214. android:layout_weight="1"
  215. android:text="@string/btn_sin"
  216. android:textSize="25sp"/>
  217. <Button
  218. android:id="@+id/btn_cos"
  219. android:layout_width="40dp"
  220. android:layout_height="fill_parent"
  221. android:layout_weight="1"
  222. android:text="@string/btn_cos"
  223. android:textSize="25sp"/>
  224. </TableRow>
  225. <TableRow
  226. android:id="@+id/row_6"
  227. android:layout_width="fill_parent"
  228. android:layout_height="fill_parent"
  229. android:layout_weight="1">
  230. <Button
  231. android:id="@+id/btn_cot"
  232. android:layout_width="60dp"
  233. android:layout_height="fill_parent"
  234. android:layout_weight="1"
  235. android:text="@string/btn_cot"
  236. android:textSize="25sp"/>
  237. <Button
  238. android:id="@+id/btn_equal"
  239. android:layout_width="40dp"
  240. android:layout_height="fill_parent"
  241. android:layout_weight="1"
  242. android:text="@string/btn_equal"
  243. android:textSize="25sp"/>
  244. </TableRow>
  245. </TableLayout>
  246. </LinearLayout>

上面这个就是布局文件了...这个布局在不同的分辨率的屏幕上,显示是有所区别的...不过应该差别不是很大.....

接着就是src下的MainActivity文件了....注释掉的地方,大家可以直接略过....今天再次优化了一下,上次的代码有点冗余....

  1. package com.example.android_calculator;
  2.  
  3. import java.lang.annotation.Target;
  4.  
  5. import android.os.Bundle;
  6. import android.app.Activity;
  7. import android.view.Menu;
  8. import android.view.MenuItem;
  9. import android.view.View;
  10. import android.widget.Button;
  11. import android.widget.TextView;
  12. import android.view.View.OnClickListener;
  13. import butterknife.ButterKnife;
  14. import butterknife.InjectView;
  15. import butterknife.OnClick;
  16. import android.widget.EditText;
  17.  
  18. public class MainActivity extends Activity {
  19.  
  20. String str = "";
  21. double result = 0, num1 = 0, num2 = 0;
  22. int sign = 0, flag = 0;
  23. View vi;
  24. EditText et_show;
  25. Button but_num[] = new Button[10];
  26. Button but_mark[] = new Button[14];
  27.  
  28. @Override
  29. protected void onCreate(Bundle savedInstanceState) {
  30. super.onCreate(savedInstanceState);
  31. setContentView(R.layout.activity_main);
  32. et_show = (EditText) findViewById(R.id.et_show);
  33. et_show.setKeyListener(null);
  34. int i;
  35. int j;
  36. int[] btn_id = new int[] { R.id.btn_add, R.id.btn_sub, R.id.btn_mlt,
  37. R.id.btn_div, R.id.btn_equal, R.id.btn_spot, R.id.btn_sin,
  38. R.id.btn_cos, R.id.btn_tan, R.id.btn_cot, R.id.btn_square,
  39. R.id.btn_sqrt, R.id.clears, R.id.clearAll };
  40. for (i = 0; i < but_num.length; i++) {
  41. String btnid = "btn" + "_" + i;
  42. int resID = getResources().getIdentifier(btnid, "id",
  43. "com.example.android_calculator");
  44. but_num[i] = (Button) findViewById(resID);
  45. but_num[i].setOnClickListener(new onclicklistener());
  46. }
  47. for (j = 0; j < but_mark.length; j++) {
  48. but_mark[j] = (Button) findViewById(btn_id[j]);
  49. but_mark[j].setOnClickListener(new onclicklistener());
  50. }
  51. }
  52.  
  53. public double calculater() {
  54. switch (sign) {
  55. case 0:
  56. result = num2;
  57. break;
  58. case 1:
  59. result = num1 + num2;
  60. break;
  61. case 2:
  62. result = num1 - num2;
  63. break;
  64. case 3:
  65. result = num1 * num2;
  66. break;
  67. case 4:
  68. result = num1 / num2;
  69. break;
  70. }
  71. num1 = result;
  72. sign = 0;
  73. return result;
  74. }
  75.  
  76. public void click_num(int num) {
  77. int o = 0;
  78. if (num == 0) {
  79. if (flag == 1) {
  80. str = "";
  81. str += 0;
  82. et_show.setText(str);
  83. flag = 0;
  84. } else {
  85. char ch1[];
  86. ch1 = str.toCharArray();
  87. if (!(ch1.length == 1 && ch1[0] == '0')) {
  88. str += 0;
  89. et_show.setText(str);
  90. }
  91. }
  92. } else {
  93. for (o = 1; o < 10; o++) {
  94. if (o == num) {
  95. if (flag == 1) {
  96. str = "";
  97. str += o;
  98. et_show.setText(str);
  99. flag=0;
  100. }else{
  101. str+=o;
  102. et_show.setText(str);
  103. }
  104. }
  105. }
  106. }
  107. }
  108. public void click_mark(int num, View vv){
  109. if(str!=""){
  110. if(vi==but_mark[num]){
  111. sign=num+1;
  112. }else{
  113. num2=Double.parseDouble(str);
  114. calculater();
  115. str=""+result;
  116. et_show.setText(str);
  117. sign=num+1;
  118. flag=1;
  119. vi=vv;
  120. }
  121. }
  122. }
  123. class onclicklistener implements OnClickListener {
  124. public void onClick(View v) {
  125. switch (v.getId()) {
  126. case R.id.btn_0: {
  127. click_num(0);
  128. vi = v;
  129. break;
  130. }
  131. case R.id.btn_1: {
  132. click_num(1);
  133. vi = v;
  134. break;
  135. }
  136. case R.id.btn_2: {
  137. click_num(2);
  138. vi = v;
  139. break;
  140. }
  141. case R.id.btn_3: {
  142. click_num(3);
  143. vi = v;
  144. break;
  145. }
  146. case R.id.btn_4: {
  147. click_num(4);
  148. vi = v;
  149. break;
  150. }
  151. case R.id.btn_5: {
  152. click_num(5);
  153. vi = v;
  154. break;
  155. }
  156. case R.id.btn_6: {
  157. click_num(6);
  158. vi = v;
  159. break;
  160. }
  161. case R.id.btn_7: {
  162. click_num(7);
  163. vi = v;
  164. break;
  165. }
  166. case R.id.btn_8: {
  167. click_num(8);
  168. vi = v;
  169. break;
  170. }
  171. case R.id.btn_9: {
  172. click_num(9);
  173. vi = v;
  174. break;
  175. }
  176. case R.id.btn_add: {
  177. click_mark(0,v);
  178. break;
  179. }
  180. case R.id.btn_sub: {
  181. click_mark(1,v);
  182. break;
  183. }
  184. case R.id.btn_mlt: {
  185. click_mark(2,v);
  186. break;
  187. }
  188. case R.id.btn_div: {
  189. click_mark(3,v);
  190. break;
  191. }
  192. case R.id.btn_spot: {
  193. str = str + ".";
  194. et_show.setText(str);
  195. break;
  196. }
  197. case R.id.btn_equal: {
  198. if (str != "" && vi != but_mark[0] && vi != but_mark[1]
  199. && vi != but_mark[2] && vi != but_mark[3]) {
  200. num2 = Double.parseDouble(str);
  201. calculater();
  202. str = "" + result;
  203. et_show.setText(str);
  204. flag = 1;
  205. vi = v;
  206. }
  207. break;
  208. }
  209. case R.id.btn_sqrt: {
  210. if (str != "") {
  211. num2 = Double.parseDouble(str);
  212. result = Math.sqrt(num2);
  213. str = "" + result;
  214. et_show.setText(str);
  215. }
  216. break;
  217. }
  218. case R.id.btn_square: {
  219. if (str != "") {
  220. num2 = Double.parseDouble(str);
  221. result = num2 * num2;
  222. str = "" + result;
  223. et_show.setText(str);
  224. }
  225. break;
  226. }
  227. case R.id.btn_sin: {
  228. if (str != "") {
  229. num2 = Double.parseDouble(str);
  230. result = Math.sin(num2);
  231. str = "" + result;
  232. et_show.setText(str);
  233. }
  234. break;
  235. }
  236. case R.id.btn_cos: {
  237. if (str != "") {
  238. num2 = Double.parseDouble(str);
  239. result = Math.cos(num2);
  240. str = "" + result;
  241. et_show.setText(str);
  242. }
  243. break;
  244. }
  245. case R.id.btn_tan: {
  246. if (str != "") {
  247. num2 = Double.parseDouble(str);
  248. result = Math.tan(num2);
  249. str = "" + result;
  250. et_show.setText(str);
  251. }
  252. break;
  253. }
  254. case R.id.btn_cot: {
  255. if (str != "") {
  256. num2 = Double.parseDouble(str);
  257. result = (1 / Math.tan(num2));
  258. str = "" + result;
  259. et_show.setText(str);
  260. }
  261. break;
  262. }
  263. case R.id.clears: {
  264. str = "";
  265. et_show.setText(str);
  266. vi = v;
  267. break;
  268. }
  269. case R.id.clearAll: {
  270. num1 = 0.0;
  271. num2 = 0;
  272. result = 0.0;
  273. str = "";
  274. et_show.setText(str);
  275. }
  276. }
  277. }
  278. }
  279.  
  280. @Override
  281. public boolean onCreateOptionsMenu(Menu menu) {
  282. // Inflate the menu; this adds items to the action bar if it is present.
  283. menu.add(0, 1, 1, "退出");
  284. return super.onCreateOptionsMenu(menu);
  285. }
  286.  
  287. public boolean onOptionsItemSelected(MenuItem item) {
  288. if (item.getItemId() == 1) {
  289. finish();
  290. }
  291. return super.onOptionsItemSelected(item);
  292. }
  293. }

这里我注释掉的地方大家是不用看的...因为原本我是打算使用开源框架butterknife去实现findViewById()方法...觉得那样做会稍微的减少一下代码的书写量...但是没有实现成功,虽然是界面可以成功的显示,但是所有的按钮都无法被触发监听...如果有哪位大神明白的,请您指教我一下,小弟将感激不尽...

然后就是string.xml文件了.....

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.  
  4. <string name="app_name">Android_calculator</string>
  5. <string name="menu_settings">退出</string>
  6. <string name="action_settings">Settings</string>
  7. <string name="hello_world">Hello world!</string>
  8. <string name="et_show">show</string>
  9. <string name="clears">C</string>
  10. <string name="clearAll">清除</string>
  11. <string name="btn_1">1</string>
  12. <string name="btn_2">2</string>
  13. <string name="btn_3">3</string>
  14. <string name="btn_add">+</string>
  15. <string name="btn_4">4</string>
  16. <string name="btn_5">5</string>
  17. <string name="btn_6">6</string>
  18. <string name="btn_sub">-</string>
  19. <string name="btn_7">7</string>
  20. <string name="btn_8">8</string>
  21. <string name="btn_9">9</string>
  22. <string name="btn_mlt">*</string>
  23. <string name="btn_0">0</string>
  24. <string name="btn_spot">.</string>
  25. <string name="btn_equal">=</string>
  26. <string name="btn_div">/</string>
  27. <string name="btn_square">x^2</string>
  28. <string name="btn_sqrt">√x</string>
  29. <string name="btn_sin">sin</string>
  30. <string name="btn_cos">cos</string>
  31. <string name="btn_tan">tan</string>
  32. <string name="btn_cot">cot</string>
  33. </resources>

这个文件相对就比较简单了....没什么过多的东西...下面这个是我自己源代码的全地址...很简单的东西....

 http://files.cnblogs.com/files/RGogoing/Android_calculator.zip

再发一个高端的....这个用到了集合框架...写的挺好的....相比之下我上面那个就是个渣渣...

 http://files.cnblogs.com/files/RGogoing/fxmjsjym_a5.zip

Android 简单计算器源码....的更多相关文章

  1. c 语言简单计算器源码

    //  main.c //  计算器 //  Created by qianfeng on 14-7-15. //  Copyright (c) 2014年 ___FGY___. All rights ...

  2. 【转】Android 4.3源码的下载和编译环境的安装及编译

    原文网址:http://jingyan.baidu.com/article/c85b7a641200e0003bac95a3.html  告诉windows用户一个不好的消息,windows环境下没法 ...

  3. Android 开源项目源码解析(第二期)

    Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations ...

  4. android仿漫画源码、抽奖转盘、Google相册、动画源码等

    Android精选源码 android实现仿今日头条的开源项目 波浪效果,实现流量的动态显示 美妆领域的app, 集成了摄像头取色, 朋友圈, 滤镜等 android仿漫画源码 android一个视差 ...

  5. android狼人杀源码,桌面源码,猎豹快切源码

    Android精选源码 android实现狼人杀app源码 android实现精心打造的Android基础框架源码 android热门电影的客户端源码 android 实现桌面的Launcher源码 ...

  6. android企业级商城源码、360°全景图VR源码、全民直播源码等

    Android精选源码 [新版]Android技术博客精华汇总 开源了:乐乐音乐5.0-Android音乐播放器 android实现仿真水波纹效果源码 360°全景图VR,这是一个值得把玩的APP a ...

  7. Ubantu16.04进行Android 8.0源码编译

    参考这篇博客 经过测试,8.0源码下载及编译之后,占用100多G的硬盘空间,尽量给ubantu系统多留一些硬盘空间,如果后续需要在编译好的源码上进行开发,需要预留更多的控件,为了防止后续出现文件权限问 ...

  8. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

  9. 史上最详细的Android消息机制源码解析

    本人只是Android菜鸡一个,写技术文章只是为了总结自己最近学习到的知识,从来不敢为人师,如果里面有不正确的地方请大家尽情指出,谢谢! 606页Android最新面试题含答案,有兴趣可以点击获取. ...

随机推荐

  1. DRAM 内存介绍(二)

    参考资料:http://www.anandtech.com/show/3851/everything-you-always-wanted-to-know-about-sdram-memory-but- ...

  2. samba4.1.9安装

    ./configure \ --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --with-piddir=/run/samba \ ...

  3. 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 ...

  4. ecshop 进入后台登录帐号出现乱码解决方法

    进入后台登录帐号出现如果生成乱码 MySQL server error report:Array ( [0] => Array ( [message] => MySQL Query Err ...

  5. 防抖(Debounce)与节流( throttle)区别

    http://www.cnblogs.com/ShadowLoki/p/3712048.html http://blog.csdn.net/tina_ttl/article/details/51830 ...

  6. Spring3系列12- Spring AOP AspectJ

    Spring3系列12- Spring AOP AspectJ 本文讲述使用AspectJ框架实现Spring AOP. 再重复一下Spring AOP中的三个概念, Advice:向程序内部注入的代 ...

  7. smdkv210

    参考:http://code.google.com/p/libyuv/issues/detail?id=295 ******************************************** ...

  8. FastSocket客户端/服务端通讯示例

    新建控制台项目,命名为Server 添加FastSocket.SocketBase,FastSocket.Server引用   Socket命令服务类: Sodao.FastSocket.Server ...

  9. Jquery实现ready()的源码

    function bindReady(){ if ( readyBound ) return; readyBound = true; // Mozilla, Opera and webkit nigh ...

  10. 编译安装 LLVM

    本文记录 LLVM 的安装过程,比较繁琐,使用 LLVM 3.4 操作系统:CentOS 6.6 64 位 1. 下载需要的软件 相关软件下载地址:http://llvm.org/releases/d ...