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>View Code
上面这个就是布局文件了...这个布局在不同的分辨率的屏幕上,显示是有所区别的...不过应该差别不是很大.....
接着就是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 { // @InjectView(R.id.btn_0) Button but_0; // @InjectView(R.id.btn_1) Button but_1; // @InjectView(R.id.btn_2) Button but_2; // @InjectView(R.id.btn_3) Button but_3; // @InjectView(R.id.btn_4) Button but_4; // @InjectView(R.id.btn_5) Button but_5; // @InjectView(R.id.btn_6) Button but_6; // @InjectView(R.id.btn_7) Button but_7; // @InjectView(R.id.btn_8) Button but_8; // @InjectView(R.id.btn_9) Button but_9; // @InjectView(R.id.btn_add) Button but_add; // @InjectView(R.id.btn_cos) Button but_cos; // @InjectView(R.id.btn_cot) Button but_cot; // @InjectView(R.id.btn_div) Button but_div; // @InjectView(R.id.btn_equal) Button but_equal; // @InjectView(R.id.btn_mlt) Button but_mlt; // @InjectView(R.id.btn_sin) Button but_sin; // @InjectView(R.id.btn_spot) Button but_spot; // @InjectView(R.id.btn_sqrt) Button but_sqrt; // @InjectView(R.id.btn_square) Button but_square; // @InjectView(R.id.btn_sub) Button but_sub; // @InjectView(R.id.btn_tan) Button but_tan; // @InjectView(R.id.clears) Button clears; // @InjectView(R.id.clearAll) Button clearAll; // Button []but_num=new Button[10]; String str=""; double result=0, num1=0, num2=0; int sign=0, flag=0; View vi; EditText et_show; Button but_0,but_1,but_2,but_3,but_4,but_5,but_6,but_7; Button but_8,but_9,but_add,but_sub,but_mlt,but_div,but_spot; Button but_sin,but_cos,but_tan,but_cot,but_equal,but_sqrt,but_square; Button clears,clearAll; @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); ButterKnife.inject(this); but_0=(Button)findViewById(R.id.btn_0); but_1=(Button)findViewById(R.id.btn_1); but_2=(Button)findViewById(R.id.btn_2); but_3=(Button)findViewById(R.id.btn_3); but_4=(Button)findViewById(R.id.btn_4); but_5=(Button)findViewById(R.id.btn_5); but_6=(Button)findViewById(R.id.btn_6); but_7=(Button)findViewById(R.id.btn_7); but_8=(Button)findViewById(R.id.btn_8); but_9=(Button)findViewById(R.id.btn_9); but_add=(Button)findViewById(R.id.btn_add);//加号.. but_sub=(Button)findViewById(R.id.btn_sub);//减号.. but_mlt=(Button)findViewById(R.id.btn_mlt);//乘号.. but_div=(Button)findViewById(R.id.btn_div);//除号.. but_spot=(Button)findViewById(R.id.btn_spot);//点.. but_equal=(Button)findViewById(R.id.btn_equal);//等于.. but_sin=(Button)findViewById(R.id.btn_sin);//sin.. but_cos=(Button)findViewById(R.id.btn_cos);//cos.. but_tan=(Button)findViewById(R.id.btn_tan);//tan.. but_cot=(Button)findViewById(R.id.btn_cot);//cot.. but_square=(Button)findViewById(R.id.btn_square);//平方.. but_sqrt=(Button)findViewById(R.id.btn_sqrt);//根号.. clears=(Button)findViewById(R.id.clears);//清除.. clearAll=(Button)findViewById(R.id.clearAll);//全清.. but_0.setOnClickListener(new onclicklistener()); but_1.setOnClickListener(new onclicklistener()); but_2.setOnClickListener(new onclicklistener()); but_3.setOnClickListener(new onclicklistener()); but_4.setOnClickListener(new onclicklistener()); but_5.setOnClickListener(new onclicklistener()); but_6.setOnClickListener(new onclicklistener()); but_7.setOnClickListener(new onclicklistener()); but_8.setOnClickListener(new onclicklistener()); but_9.setOnClickListener(new onclicklistener()); but_add.setOnClickListener(new onclicklistener()); but_sub.setOnClickListener(new onclicklistener()); but_mlt.setOnClickListener(new onclicklistener()); but_div.setOnClickListener(new onclicklistener()); but_spot.setOnClickListener(new onclicklistener()); but_sin.setOnClickListener(new onclicklistener()); but_cos.setOnClickListener(new onclicklistener()); but_tan.setOnClickListener(new onclicklistener()); but_cot.setOnClickListener(new onclicklistener()); but_equal.setOnClickListener(new onclicklistener()); but_sqrt.setOnClickListener(new onclicklistener()); but_square.setOnClickListener(new onclicklistener()); clears.setOnClickListener(new onclicklistener()); clearAll.setOnClickListener(new onclicklistener()); /*使用注解来绑定事件.. * */ } public double calculater(){ switch(sign){ case 0: result=num2; //res=3; 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; //num1=3; sign=0; return result; } class onclicklistener implements OnClickListener{ public void onClick(View v){ switch(v.getId()){ case R.id.btn_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); } } vi=v; break; } case R.id.btn_1:{ if(flag==1){ str=""; str+=1; et_show.setText(str); flag=0; }else{ str+=1; et_show.setText(str); } vi=v; break; } case R.id.btn_2:{ if(flag==1){ str=""; str+=2; et_show.setText(str); flag=0; }else{ str+=2; et_show.setText(str); } vi=v; break; } case R.id.btn_3:{ if(flag==1){ str=""; str+=3; et_show.setText(str); flag=0; }else{ str+=3; et_show.setText(str); } vi=v; break; } case R.id.btn_4:{ if(flag==1){ str=""; str+=4; et_show.setText(str); flag=0; }else{ str+=4; et_show.setText(str); } vi=v; break; } case R.id.btn_5:{ if(flag==1){ str=""; str+=5; et_show.setText(str); flag=0; }else{ str+=5; et_show.setText(str); } vi=v; break; } case R.id.btn_6:{ if(flag==1){ str=""; str+=6; et_show.setText(str); flag=0; }else{ str+=6; et_show.setText(str); } vi=v; break; } case R.id.btn_7:{ if(flag==1){ str=""; str+=7; et_show.setText(str); flag=0; }else{ str+=7; et_show.setText(str); } vi=v; break; } case R.id.btn_8:{ if(flag==1){ str=""; str+=8; et_show.setText(str); flag=0; }else{ str+=8; et_show.setText(str); } vi=v; break; } case R.id.btn_9:{ if(flag==1){ str=""; str+=9; et_show.setText(str); flag=0; }else{ str+=9; et_show.setText(str); } vi=v; break; } case R.id.btn_add:{ if(str!=""){ if(vi==but_add){ sign=1; }else{ num2=Double.parseDouble(str); //num2=3; calculater(); str=""+result; et_show.setText(str); sign=1; flag=1; vi=v; } } break; } case R.id.btn_sub:{ if(str!=""){ if(vi==but_sub){ sign=2; }else{ num2=Double.parseDouble(str); calculater(); str=""+result; et_show.setText(str); sign=2; flag=1; vi=v; } } break; } case R.id.btn_mlt:{ if(str!=""){ if(vi==but_mlt){ sign=3; }else{ num2=Double.parseDouble(str); calculater(); str=""+result; et_show.setText(str); flag=1; sign=3; vi=v; } } break; } case R.id.btn_div:{ if(str!=""){ if(vi==but_div){ sign=4; }else{ num2=Double.parseDouble(str); calculater(); str=""+result; et_show.setText(str); flag=1; sign=4; vi=v; } } break; } case R.id.btn_spot:{ str=str+"."; et_show.setText(str); break; } case R.id.btn_equal:{ if(str!=""&&vi!=but_add&&vi!=but_sub&&vi!=but_mlt&&vi!=but_div){ 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); } } } } // @OnClick(R.id.btn_0) void changetext0(){ // 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); // } // } // vi=but_0; // } // @OnClick(R.id.btn_1) void changetext1(){ // if(flag==1){ // str=""; // str+=1; // et_show.setText(str); // flag=0; // }else{ // str+=1; // et_show.setText(str); // } // vi=but_1; // } // @OnClick(R.id.btn_2) void changetext2(){ // if(flag==1){ // str=""; // str+=2; // et_show.setText(str); // flag=0; // }else{ // str+=2; // et_show.setText(str); // } // vi=but_2; // } // @OnClick(R.id.btn_3) void changetext3(){ // if(flag==1){ // str=""; // str+=3; // et_show.setText(str); // flag=0; // }else{ // str+=3; // et_show.setText(str); // } // vi=but_3; // } // @OnClick(R.id.btn_4) void changetext4(){ // if(flag==1){ // str=""; // str+=4; // et_show.setText(str); // flag=0; // }else{ // str+=4; // et_show.setText(str); // } // vi=but_4; // } // @OnClick(R.id.btn_5) void changetext5(){ // if(flag==1){ // str=""; // str+=5; // et_show.setText(str); // flag=0; // }else{ // str+=5; // et_show.setText(str); // } // vi=but_5; // } // @OnClick(R.id.btn_6) void changetext6(){ // if(flag==1){ // str=""; // str+=6; // et_show.setText(str); // flag=0; // }else{ // str+=6; // et_show.setText(str); // } // vi=but_6; // } // @OnClick(R.id.btn_7) void changetext7(){ // if(flag==1){ // str=""; // str+=7; // et_show.setText(str); // flag=0; // }else{ // str+=7; // et_show.setText(str); // } // vi=but_7; // } // @OnClick(R.id.btn_8) void changetext8(){ // if(flag==1){ // str=""; // str+=8; // et_show.setText(str); // flag=0; // }else{ // str+=8; // et_show.setText(str); // } // vi=but_8; // } // @OnClick(R.id.btn_9) void changetext9(){ // if(flag==1){ // str=""; // str+=9; // et_show.setText(str); // flag=0; // }else{ // str+=9; // et_show.setText(str); // } // vi=but_9; // } // @OnClick(R.id.btn_add) void changetextadd(){ // if(str!=""){ // if(vi==but_add){ // sign=1; // }else{ // num2=Double.parseDouble(str); //num2=3; // calculater(); // str=""+result; // et_show.setText(str); // sign=1; // flag=1; // vi=but_add; // } // // } // } // @OnClick(R.id.btn_sub) void changetextsub(){ // if(str!=""){ // if(vi==but_sub){ // sign=2; // }else{ // num2=Double.parseDouble(str); // calculater(); // str=""+result; // et_show.setText(str); // sign=2; // flag=1; // vi=but_sub; // } // } // } // @OnClick(R.id.btn_mlt) void changetextmlt(){ // if(str!=""){ // if(vi==but_mlt){ // sign=3; // }else{ // num2=Double.parseDouble(str); // calculater(); // str=""+result; // et_show.setText(str); // flag=1; // sign=3; // vi=but_mlt; // } // } // } // @OnClick(R.id.btn_div) void changetextdiv(){ // if(str!=""){ // if(vi==but_div){ // sign=4; // }else{ // num2=Double.parseDouble(str); // calculater(); // str=""+result; // et_show.setText(str); // flag=1; // sign=4; // vi=but_div; // } // } // } // @OnClick(R.id.btn_spot) void changetextsopt(){ // str=str+"."; // et_show.setText(str); // } // @OnClick(R.id.btn_equal) void changetextequal(){ // if(str!=""&&vi!=but_add&&vi!=but_sub&&vi!=but_mlt&&vi!=but_div){ // num2=Double.parseDouble(str); // calculater(); // str=""+result; // et_show.setText(str); // flag=1; // vi=but_equal; // } // } // @OnClick(R.id.btn_sqrt) void changetextsqrt(){ // if(str!=""){ // num2=Double.parseDouble(str); // result=Math.sqrt(num2); // str=""+result; // et_show.setText(str); // } // } // @OnClick(R.id.btn_square) void changetextsquare(){ // if(str!=""){ // num2=Double.parseDouble(str); // result=num2*num2; // str=""+result; // et_show.setText(str); // } // } // @OnClick(R.id.btn_sin) void changetextsin(){ // if(str!=""){ // num2=Double.parseDouble(str); // result=Math.sin(num2); // str=""+result; // et_show.setText(str); // } // } // @OnClick(R.id.btn_cos) void changetextcos(){ // if(str!=""){ // num2=Double.parseDouble(str); // result=Math.tan(num2); // str=""+result; // et_show.setText(str); // } // } // @OnClick(R.id.btn_tan) void changetexttan(){ // if(str!=""){ // num2=Double.parseDouble(str); // result=Math.tan(num2); // str=""+result; // et_show.setText(str); // } // } // @OnClick(R.id.btn_cot) void changetextcot(){ // if(str!=""){ // num2=Double.parseDouble(str); // result=(1/Math.tan(num2)); // str=""+result; // et_show.setText(str); // } // } // @OnClick(R.id.clears) void changetextclears(){ // str=""; // et_show.setText(str); // vi=clears; // } // @OnClick(R.id.clearAll) void changetextclearAll(){ // 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); } }View Code
这里我注释掉的地方大家是不用看的...因为原本我是打算使用开源框架butterknife去实现findViewById()方法...觉得那样做会稍微的减少一下代码的书写量...但是没有实现成功,虽然是界面可以成功的显示,但是所有的按钮都无法被触发监听...如果有哪位大神明白的,请您指教我一下,小弟将感激不尽...
<?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>
这个文件相对就比较简单了....没什么过多的东西...下面这个是我自己源代码的全地址...很简单的东西....
再发一个高端的....这个用到了集合框架...写的挺好的....相比之下我上面那个就是个渣渣...