android的计算器
今天我闲着无聊,便想仿照Iphone的计算器自己写一个出来玩玩,于是就开动脑经,来场头脑风暴了!我拿什么了写呢?wp?这是个不错的选择,但是我最近在研究安卓的开发(求各位MSP不要烧我,我买不起MAC,你们要搞应该找昌豪,他有MAC,先烧死他再来烧我~~~)搞安卓开发其实还是蛮简单的!不就是监听,然后实现功能吗?跟WP的开发过程有点像 <Button click = "clickaction"\> 在后台process中会自动生成触发函数 这是wp的开发过程,而安卓呢?在xml中定义<Button android:id = "@+id\button"\> 然后在主函数里面写一个监听类,注意class ButtonListener implements OnClickListener 继承监听类,然后new一个 找到button的id 就可以设置它的监听了!好了废话不多说,让我们直接看安卓的界面吧!
有木有很像iphone的计算器啊?哈哈 不过我发现最后一行的权重在不同的手机上分配的不一样吧,这是我比较郁闷的地方,不知道有没有大牛能够帮小弟解决呢?
首先先上我们的xml代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <LinearLayout android:id="@+id/linear" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="5dp" > <TextView android:id="@+id/textView" android:layout_width="match_parent" android:layout_height="100dp" android:gravity="right" android:hint="@string/insert" android:maxLength="26" android:textSize="40sp" /> </LinearLayout> <TableLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/linear" > <TableRow android:layout_weight="1" android:paddingLeft="5dp" android:paddingRight="5dp" > <Button android:id="@+id/clear" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/clear" /> <Button android:id="@+id/as" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/as" /> <Button android:id="@+id/mod" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/mod" /> <Button android:id="@+id/exc" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/exc" /> </TableRow> <TableRow android:layout_weight="1" android:paddingLeft="5dp" android:paddingRight="5dp" > <Button android:id="@+id/button7" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num7" /> <Button android:id="@+id/button8" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num8" /> <Button android:id="@+id/button9" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num9" /> <Button android:id="@+id/rid" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/rid" /> </TableRow> <TableRow android:layout_weight="1" android:paddingLeft="5dp" android:paddingRight="5dp" > <Button android:id="@+id/button4" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num4" /> <Button android:id="@+id/button5" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num5" /> <Button android:id="@+id/button6" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num6" /> <Button android:id="@+id/sub" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/sub" /> </TableRow> <TableRow android:layout_weight="1" android:paddingLeft="5dp" android:paddingRight="5dp" > <Button android:id="@+id/button1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num1" /> <Button android:id="@+id/button2" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num2" /> <Button android:id="@+id/button3" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/num3" /> <Button android:id="@+id/add" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/add" /> </TableRow> <TableRow android:layout_weight="1" android:paddingLeft="5dp" android:paddingRight="5dp" > <Button android:id="@+id/button0" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="2" android:background="@drawable/rectangle" android:text="@string/num0" /> <Button android:id="@+id/rad" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/rad" /> <Button android:id="@+id/result" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:background="@drawable/rectangle" android:text="@string/result" /> </TableRow> </TableLayout> </RelativeLayout>
在这里我使用的一个线性布局给我得textview框定了一个100dp的范围,然后使用表格布局把控件放进去。
下面是string.xml 主要存放的一些字符串的资源
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">T0913_mycal</string> <string name="action_settings">Settings</string> <string name="hello_world">Hello world!</string> <string name="insert">0</string> <string name="num0">0</string> <string name="num1">1</string> <string name="num2">2</string> <string name="num3">3</string> <string name="num4">4</string> <string name="num5">5</string> <string name="num6">6</string> <string name="num7">7</string> <string name="num8">8</string> <string name="num9">9</string> <string name="exc">/</string> <string name="rid">*</string> <string name="sub">-</string> <string name="add">+</string> <string name="result">=</string> <string name="clear">C</string> <string name="rad">.</string> <string name="as">+/-</string> <string name="mod">%</string> </resources>
在这里我把所有的内容全部做了链接,这也是一种软件工程的思考,希望大家多多使用这种方式。
然后大家看到我得控件都是圆角而且带边框的 这是在drawable中获取的效果!
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="#ff9d77"/> <padding android:left="7dp" android:top="7dp" android:right="7dp" android:bottom="7dp" /> <stroke android:width="2dp" android:color="#dcdcdc" /> <corners android:radius="8dp" /> </shape>
让每个控件的背景都是有这个xml就可以了
下面就是这个程序的实现代码了!
package com.example.t0913_mycal; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private Button []num =new Button[10]; private Button rid,add,sub,result,exc,clear,as,mod,rad; private TextView str ; private int option = 0;//运算符状态 private boolean newdigital=true;//标记是否是新输入的数字 private double firstNum=0,secondNum=0;//两个相加的数 private double c;//表示取正负 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rad =(Button)findViewById(R.id.rad); str = (TextView)findViewById(R.id.textView); rid =(Button)findViewById(R.id.rid); add = (Button)findViewById(R.id.add); sub = (Button)findViewById(R.id.sub); result = (Button)findViewById(R.id.result); exc = (Button)findViewById(R.id.exc); clear = (Button)findViewById(R.id.clear); as = (Button)findViewById(R.id.as); mod = (Button)findViewById(R.id.mod); num[0] = (Button)findViewById(R.id.button0); num[1] = (Button)findViewById(R.id.button1); num[2] = (Button)findViewById(R.id.button2); num[3] = (Button)findViewById(R.id.button3); num[4] = (Button)findViewById(R.id.button4); num[5] = (Button)findViewById(R.id.button5); num[6] = (Button)findViewById(R.id.button6); num[7] = (Button)findViewById(R.id.button7); num[8] = (Button)findViewById(R.id.button8); num[9] = (Button)findViewById(R.id.button9); ButtonListener listener = new ButtonListener(); rad.setOnClickListener(listener); str.setOnClickListener(listener); rid.setOnClickListener(listener); add.setOnClickListener(listener); sub.setOnClickListener(listener); result.setOnClickListener(listener); exc.setOnClickListener(listener); clear.setOnClickListener(listener); as.setOnClickListener(listener); mod.setOnClickListener(listener); num[0].setOnClickListener(listener); num[1].setOnClickListener(listener); num[2].setOnClickListener(listener); num[3].setOnClickListener(listener); num[4].setOnClickListener(listener); num[5].setOnClickListener(listener); num[6].setOnClickListener(listener); num[7].setOnClickListener(listener); num[8].setOnClickListener(listener); num[9].setOnClickListener(listener); } class ButtonListener implements OnClickListener{ @Override public void onClick(View v) { // TODO Auto-generated method stub Button btu = (Button)v; String s = str.getText().toString();//获取文本框显示的字符串 String t = (String)btu.getText().toString(); if(btu.getId() == R.id.button0 || btu.getId() == R.id.button1 || btu.getId() == R.id.button2 ||btu.getId() == R.id.button3 || btu.getId() == R.id.button4 || btu.getId() == R.id.button5 || btu.getId() == R.id.button6 ||btu.getId() == R.id.button7||btu.getId() == R.id.button8 || btu.getId() == R.id.button9 ){ if(newdigital){ str.setText(""); str.setText(t); newdigital = false; } else{ str.setText(s+t); newdigital = false; }return; } if(btu.getId()==R.id.as)//改变数的正负性 { if(s.length() == 0){ firstNum = 0; secondNum = 0; newdigital = true; option = 0; return ; } else if (s !=""){ c=Double.parseDouble(s); str.setText(String.valueOf(-c)); return; } } if(btu.getId() == R.id.add){ firstNum = Double.parseDouble(s); option=1; newdigital = true; return; } if(btu.getId() == R.id.sub){ firstNum = Double.parseDouble(s); option = 2; newdigital = true; return; } if(btu.getId() == R.id.rid){ firstNum = Double.parseDouble(s); option = 3; newdigital = true; return; } if(btu.getId() == R.id.exc){ firstNum = Double.parseDouble(s); option = 4; newdigital = true; return; } if(btu.getId() == R.id.mod){ firstNum = Double.parseDouble(s); option = 5; newdigital = true; return; } if(btu.getId() == R.id.clear){ firstNum = 0; secondNum = 0; newdigital = true; option = 0; str.setText(""); return; } if(btu.getId() == R.id.rad){ if(s.length() == 0) { str.setText("0."); newdigital=false; } else if(s.indexOf(".") == -1) { str.setText(s+"."); } return; } if(btu.getId() == R.id.result){ secondNum=Double.parseDouble(s); switch(option) { case 1: str.setText(String.valueOf(firstNum+secondNum));break; case 2: str.setText(String.valueOf(firstNum-secondNum));break; case 3: str.setText(String.valueOf(firstNum*secondNum));break; case 4: { if(secondNum!=0){ str.setText(String.valueOf(firstNum/secondNum));} else { Toast.makeText(MainActivity.this, "除数不能为0!", Toast.LENGTH_SHORT).show(); str.setText(""); firstNum=0; secondNum=0; option=0; newdigital=true; return; } break; } case 5: str.setText(String.valueOf(firstNum%secondNum)); break; } return; } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
大功告成了,我的计算器其实非常之简单!望各位多多指教!
作者:King_Alex【The Horizon Blog】
出处:http://www.cnblogs.com/samuelwnb/
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
出处:http://www.cnblogs.com/samuelwnb/
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任