学习Android已经有一段时间了,最近一直在啃书,感觉挺充实的~好期待放假,这样可以快点把书看完自己去多做点实例项目,加深理解。

这是之前写的一个计算器小程序,比较简单,但是是自己第一个用Android写出来的小程序,值得纪念噢~

计算器实例

第一部分:计算器布局设计

首选需要new一个Android项目,然后修改界面布局,代码如下

Java代码
  1. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. android:background="#111"
  7. tools:context="com.example.jisuanqi.MainActivity">
  8. <TextView
  9. android:id="@+id/tv"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"
  12. android:background="#fff"
  13. android:gravity="right"
  14. android:layout_margin="5dp"
  15. />
  16. <TableLayout
  17. android:layout_width="match_parent"
  18. android:layout_height="wrap_content">
  19. <TableRow
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content">
  22. <Button
  23. android:id="@+id/btn1"
  24. android:layout_height="wrap_content"
  25. android:layout_weight="1"
  26. android:text="1"/>
  27. <Button
  28. android:id="@+id/btn2"
  29. android:layout_height="wrap_content"
  30. android:layout_weight="1"
  31. android:text="2"/>
  32. <Button
  33. android:id="@+id/btn3"
  34. android:layout_height="wrap_content"
  35. android:layout_weight="1"
  36. android:text="3"/>
  37. <Button
  38. android:id="@+id/btnjia"
  39. android:layout_height="wrap_content"
  40. android:layout_weight="1"
  41. android:text="+"/>
  42. </TableRow>
  43. <TableRow
  44. android:layout_width="match_parent"
  45. android:layout_height="wrap_content">
  46. <Button
  47. android:id="@+id/btn4"
  48. android:layout_height="wrap_content"
  49. android:layout_weight="1"
  50. android:text="4"/>
  51. <Button
  52. android:id="@+id/btn5"
  53. android:layout_height="wrap_content"
  54. android:layout_weight="1"
  55. android:text="5"/>
  56. <Button
  57. android:id="@+id/btn6"
  58. android:layout_height="wrap_content"
  59. android:layout_weight="1"
  60. android:text="6"/>
  61. <Button
  62. android:id="@+id/btnjian"
  63. android:layout_height="wrap_content"
  64. android:layout_weight="1"
  65. android:text="-"/>
  66. </TableRow>
  67. <TableRow
  68. android:layout_width="match_parent"
  69. android:layout_height="wrap_content">
  70. <Button
  71. android:id="@+id/btn7"
  72. android:layout_height="wrap_content"
  73. android:layout_weight="1"
  74. android:text="7"/>
  75. <Button
  76. android:id="@+id/btn8"
  77. android:layout_height="wrap_content"
  78. android:layout_weight="1"
  79. android:text="8"/>
  80. <Button
  81. android:id="@+id/btn9"
  82. android:layout_height="wrap_content"
  83. android:layout_weight="1"
  84. android:text="9"/>
  85. <Button
  86. android:id="@+id/btncheng"
  87. android:layout_height="wrap_content"
  88. android:layout_weight="1"
  89. android:text="*"/>
  90. </TableRow>
  91. <TableRow
  92. android:layout_width="match_parent"
  93. android:layout_height="wrap_content">
  94. <Button
  95. android:id="@+id/btnclean"
  96. android:layout_height="wrap_content"
  97. android:layout_weight="1"
  98. android:text="C"/>
  99. <Button
  100. android:id="@+id/btn0"
  101. android:layout_height="wrap_content"
  102. android:layout_weight="1"
  103. android:text="0"/>
  104. <Button
  105. android:id="@+id/btndengyu"
  106. android:layout_height="wrap_content"
  107. android:layout_weight="1"
  108. android:text="="/>
  109. <Button
  110. android:id="@+id/btnchu"
  111. android:layout_height="wrap_content"
  112. android:layout_weight="1"
  113. android:text="/"/>
  114. </TableRow>
  115. </TableLayout>
  116. </LinearLayout>

预览效果:

虽然看起来还比较硕,但是起码有个样子了...(*^__^*)

第二部分:计算器功能实现

首先需要在主activity中注册组件

Java代码
  1. publicclassMainActivityextendsActivityimplementsOnClickListener{
  2. privateTextViewtvScreen;
  3. privateList<Item>items=newArrayList<Item>();

这里引入OnclickListener接口 是在后面绑定按钮设置监听器

然后重写onCreate方法,把布局中的按钮以及textview绑定

Java代码
  1. @Override
  2. protectedvoidonCreate(BundlesavedInstanceState){
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5. tvScreen=(TextView)findViewById(R.id.tv);
  6. findViewById(R.id.btn0).setOnClickListener(this);
  7. findViewById(R.id.btn1).setOnClickListener(this);
  8. findViewById(R.id.btn2).setOnClickListener(this);
  9. findViewById(R.id.btn3).setOnClickListener(this);
  10. findViewById(R.id.btn4).setOnClickListener(this);
  11. findViewById(R.id.btn5).setOnClickListener(this);
  12. findViewById(R.id.btn6).setOnClickListener(this);
  13. findViewById(R.id.btn7).setOnClickListener(this);
  14. findViewById(R.id.btn8).setOnClickListener(this);
  15. findViewById(R.id.btn9).setOnClickListener(this);
  16. findViewById(R.id.btnjia).setOnClickListener(this);
  17. findViewById(R.id.btnjian).setOnClickListener(this);
  18. findViewById(R.id.btncheng).setOnClickListener(this);
  19. findViewById(R.id.btnchu).setOnClickListener(this);
  20. findViewById(R.id.btndengyu).setOnClickListener(this);
  21. findViewById(R.id.btnclean).setOnClickListener(this);
  22. findViewById(R.id.btn0).setOnClickListener(this);
  23. }

到了这一步,得理清一下算法逻辑。

我们首先得输入一个数字,然后输入运算符号,再输入数字,再执行=号

10+20

一个数字一个操作符号一个数字一个操作符号这样排列

10+20=38

在执行第二个操作符号时前面三项已经可以执行运算了

所以这里需要一个原则:一旦能执行操作运算就执行操作运算,之后再与后面的元素执行相关操作

所以这里可以用数组把这些项都记录下来,然后再做一个判断,判断前面三项是否有三项,就可以执行运算,如果是就执行运算并继续到下一个。

所以接下来再创建一个类Item.java(注意这个类和Mainactivity在一个包里)表示每一项

Java代码
  1. packagecom.example.jisuanqi;
  2. publicclassItem{
  3. publicItem(doublevalue,inttype){
  4. this.value=value;
  5. this.type=type;
  6. }
  7. publicdoublevalue=0;
  8. publicinttype=0;
  9. }

以及另一个类表示数据类型Types.java

Java代码
  1. packagecom.example.jisuanqi;
  2. publicclassTypes{
  3. publicstaticfinalintjia=1;
  4. publicstaticfinalintjian=2;
  5. publicstaticfinalintcheng=3;
  6. publicstaticfinalintchu=4;
  7. publicstaticfinalintdengyu=5;
  8. }

再回到mainactivity里定义一个数组,这个数组是用来存放项的,也就是计算时输入的项。

Java代码
  1. publicclassMainActivityextendsActivityimplementsOnClickListener{
  2. privateTextViewtvScreen;
  3. privateList<Item>items=newArrayList<Item>();

然后在onclick()方法中作判断,分别执行不同的操作。

Java代码
  1. publicvoidonClick(Viewv){
  2. switch(v.getId()){
  3. caseR.id.btn0:
  4. tvScreen.append("0");
  5. break;
  6. caseR.id.btn1:
  7. tvScreen.append("1");
  8. break;
  9. caseR.id.btn2:
  10. tvScreen.append("2");
  11. break;
  12. caseR.id.btn3:
  13. tvScreen.append("3");
  14. break;
  15. caseR.id.btn4:
  16. tvScreen.append("4");
  17. break;
  18. caseR.id.btn5:
  19. tvScreen.append("5");
  20. break;
  21. caseR.id.btn6:
  22. tvScreen.append("6");
  23. break;
  24. caseR.id.btn7:
  25. tvScreen.append("7");
  26. break;
  27. caseR.id.btn8:
  28. tvScreen.append("8");
  29. break;
  30. caseR.id.btn9:
  31. tvScreen.append("9");
  32. break;
  33. caseR.id.btnjia:
  34. items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
  35. checkAndCompute();
  36. items.add(newItem(0,Types.jia));
  37. tvScreen.setText("");
  38. break;
  39. caseR.id.btnjian:
  40. items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
  41. checkAndCompute();
  42. items.add(newItem(0,Types.jian));
  43. tvScreen.setText("");
  44. break;
  45. caseR.id.btncheng:
  46. items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
  47. checkAndCompute();
  48. items.add(newItem(0,Types.cheng));
  49. tvScreen.setText("");
  50. break;
  51. caseR.id.btnchu:
  52. items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
  53. checkAndCompute();
  54. items.add(newItem(0,Types.chu));
  55. tvScreen.setText("");
  56. break;
  57. caseR.id.btnclean:
  58. tvScreen.setText("");
  59. items.clear();
  60. break;
  61. caseR.id.btndengyu:
  62. items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
  63. checkAndCompute();
  64. tvScreen.setText(items.get(0).value+"");
  65. items.clear();
  66. break;
  67. default:
  68. break;
  69. }
  70. }

注意这里还需要一个方法进行计算

Java代码
  1. publicvoidcheckAndCompute(){
  2. if(items.size()>=3){
  3. doublea=items.get(0).value;
  4. doubleb=items.get(2).value;
  5. intopt=items.get(1).type;
  6. items.clear();
  7. switch(opt){
  8. caseTypes.jia:
  9. items.add(newItem(a+b,Types.dengyu));
  10. break;
  11. caseTypes.jian:
  12. items.add(newItem(a-b,Types.dengyu));
  13. break;
  14. caseTypes.cheng:
  15. items.add(newItem(a*b,Types.dengyu));
  16. break;
  17. caseTypes.chu:
  18. items.add(newItem(a/b,Types.dengyu));
  19. break;
  20. default:
  21. break;
  22. }
  23. }
  24. }

这样一来,计算器功能就已经实现了,下面是虚拟机上的运行效果图:

操作:6+3=9









ps:写完之后发现其实还是有很多缺陷的。。比如没有小数点.,不过把左下方C的按钮换成“.”,然后再到下方加一个专门的clean按钮就可以了~

************************************************华丽的分割线******************************************************************

今天把计算器界面还有功能优化了一下,加入了小数点功能,下方加入了清屏按钮

新增了一个显示框,可以显示算法的步骤。

还加入了按钮选择状态和非选择状态颜色显示不同的功能

其实这个功能并不复杂,在res目录下新建一个drawable文件夹

然后在里面新建xml文件login_button_selector.xml类型为selector

Java代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <selectorxmlns:android="http://schemas.android.com/apk/res/android">
  3. <itemandroid:drawable="@drawable/clr_normal"android:state_pressed="false"/>
  4. <itemandroid:drawable="@drawable/clr_pressed"android:state_pressed="true"/>
  5. </selector>

然后在按钮布局中添加一句

Java代码
  1. android:background="@drawable/login_button_selector"

就ok~\(≧▽≦)/~啦啦啦

下面是运行效果截图:




最后就是整个项目的附件:

..试了几次不能上传,所以传到百度云了,下面是链接:

http://yun.baidu.com/share/link?shareid=4106246580&uk=4047395201

更多相关文章

  1. 安卓巴士真诚送上营养丰富的精美Android大餐
  2. Android(安卓)GPRS的自动打开与关闭。
  3. 在 Android(安卓)中调用二进制可执行程序(native executable )
  4. [Android--Tool]Android如何将他人的代码放入新建的工程中
  5. Android自带音乐播放器代码分析(2)
  6. Android(安卓)使用ORMLite打造万能泛型Dao简化数据持久化层
  7. 从Eclipse迁移代码到Android(安卓)Studio可能出现的异常
  8. Android学习笔记-保存文件(Saving Files)
  9. 如何查看Android里面其他应用的数据

随机推荐

  1. 配置eclipse的android开发环境
  2. android 学习示例
  3. Android(安卓)判断SD卡是否存在及容量查
  4. Android中listview中的button
  5. 系出名门Android(8)
  6. Android新增一个音频类型及双音频输出的
  7. Android(安卓)安装位置 - installLocatio
  8. android的init.rc文件的语法
  9. 【转】android 有效解决achartengine在sc
  10. Android培训班(53)