今天我闲着无聊,便想仿照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;
} }

大功告成了,我的计算器其实非常之简单!望各位多多指教!

android的计算器的更多相关文章

  1. 第一个Android项目——计算器

    第一个Android项目——计算器 效果 开始学Android一两个星期了,学习了一下基本的Activity.简单控件及几个简单布局,打算找个东西来练练手,于是就选择发计算器.关于计算器中用到的四则运 ...

  2. Android课程---计算器的实现

    <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...

  3. Android 简单计算器源码....

    PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧...     顺便去对比了一下别人写的代码...有的使用到了 ...

  4. android实现计算器功能

    设计一个简单的计算器. 第一个Activity的界面. 第二个Activity显示算式和计算结果. 第一个Activity代码: import android.app.Activity; import ...

  5. 【留念贴】Android开发——计算器

    [过程] 在电商学霸&&代码女神XuFei的影响下,接触到了关于Android客户端的一些开发,第一次在Android平台搞出了一个App,真的是激动不已,所以必须开个留念贴记录一下. ...

  6. Android 简单计算器实现源码

    1.string.xml代码 <?xml version="1.0" encoding="utf-8"?> <resources> &l ...

  7. Android学习(七) Android实现计算器

    前台页面代码,通过线性布局方式实现计算器页面:如图所示 color.xml,自定义颜色values: <?xml version="1.0" encoding="u ...

  8. Android程序-计算器

    基于Android 2.3.3做的一个练手计算器. 可解析带括号的四则运算. 解析算术表达式的时候,准备调用Webkit通过Js来解析的. 但是2.3.3存在Bug,Js调用Java会导致程序崩溃,  ...

  9. Android仿计算器界面

    代码如下: <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android ...

随机推荐

  1. Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法

    Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法. 错误信息: git clone git@github.com:ediw ...

  2. C# 多线程task

    1.异步和多线程的区别?没什么太大区别.异步是目的,使用多线程实现.想想AJAX异步加载,不就是不想让浏览器界面卡住嘛,所以在程序中对于某些单独的操作,比如写日志,我们不想等它完成后再执行其它操作(因 ...

  3. roadflow asp.net工作流自定义表单

    在roadflow表单设计器不能满足很复杂的业务需求的时候,可以采用自定义表单(即表单页面自己做). 自定义表单就是自己写一个页面,包含控制器视图,然后将这个页面挂到流程上进行审批. 自定义表单分为以 ...

  4. 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架

    Dnc.Api.Throttle    适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...

  5. Mycat SqlServer Do not have slave connection to use, use master connection instead

    Do not have slave connection to use, use master connection instead 很奇怪啊 都是按照配置配置的 怎么就是不通呢 有点怀疑人生了吧 其 ...

  6. Sql语法高级应用之四:使用视图实现多表联合数据明细

    之前章节我们讲到:如果某个表的数据是多个表的联合,并且存在列与列的合并组成新列,用视图是最好的方案. 下面我分享两个个真实的SQL语句案例 USE Wot_Inventory GO FROM sys. ...

  7. 虚拟机安装MAC OS X 10.9与Windows 7共享文件夹的方法

    在虚拟机中安装好MAC OS X后, 把CD/DVD中的ISO映像换成 VMwareWorkstation安装目录下的/darwin.iso, 然后连接上 进入MAC 系统后, 先安装vmware t ...

  8. Programmatically Disable Event Firing on List Item Update in SharePoint 2010

    1. Microsoft.SharePoint.dll Create EventFiring.cs 1.Right-click on the project, select Add and click ...

  9. pageadmin CMS 如何添加自定义页面

    理论上网站上的所有页面都可以通过栏目管理来添加,那自定义页面的意义是什么呢? 网站的需求是很多样化的,比如需要制作一个对外提供数据的api,甚至制作一个搜索页面,或者制作一些数据和栏目没有对应关系的页 ...

  10. 201621123023《Java程序设计》第13周学习总结

    一.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 二.为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网络同 ...