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