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;
} }
大功告成了,我的计算器其实非常之简单!望各位多多指教!
android的计算器的更多相关文章
- 第一个Android项目——计算器
第一个Android项目——计算器 效果 开始学Android一两个星期了,学习了一下基本的Activity.简单控件及几个简单布局,打算找个东西来练练手,于是就选择发计算器.关于计算器中用到的四则运 ...
- Android课程---计算器的实现
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="ht ...
- Android 简单计算器源码....
PS:今天算是闲着没事做了一个小型的计算器...顺便熟悉一下Android的布局,组件,以及时间监听的方法...就当是做了一个小小的练习吧... 顺便去对比了一下别人写的代码...有的使用到了 ...
- android实现计算器功能
设计一个简单的计算器. 第一个Activity的界面. 第二个Activity显示算式和计算结果. 第一个Activity代码: import android.app.Activity; import ...
- 【留念贴】Android开发——计算器
[过程] 在电商学霸&&代码女神XuFei的影响下,接触到了关于Android客户端的一些开发,第一次在Android平台搞出了一个App,真的是激动不已,所以必须开个留念贴记录一下. ...
- Android 简单计算器实现源码
1.string.xml代码 <?xml version="1.0" encoding="utf-8"?> <resources> &l ...
- Android学习(七) Android实现计算器
前台页面代码,通过线性布局方式实现计算器页面:如图所示 color.xml,自定义颜色values: <?xml version="1.0" encoding="u ...
- Android程序-计算器
基于Android 2.3.3做的一个练手计算器. 可解析带括号的四则运算. 解析算术表达式的时候,准备调用Webkit通过Js来解析的. 但是2.3.3存在Bug,Js调用Java会导致程序崩溃, ...
- Android仿计算器界面
代码如下: <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:android ...
随机推荐
- Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法
Windows10 下 github ssh 访问出现 Permission denied(publickey)错误的解决方法. 错误信息: git clone git@github.com:ediw ...
- C# 多线程task
1.异步和多线程的区别?没什么太大区别.异步是目的,使用多线程实现.想想AJAX异步加载,不就是不想让浏览器界面卡住嘛,所以在程序中对于某些单独的操作,比如写日志,我们不想等它完成后再执行其它操作(因 ...
- roadflow asp.net工作流自定义表单
在roadflow表单设计器不能满足很复杂的业务需求的时候,可以采用自定义表单(即表单页面自己做). 自定义表单就是自己写一个页面,包含控制器视图,然后将这个页面挂到流程上进行审批. 自定义表单分为以 ...
- 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架
Dnc.Api.Throttle 适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...
- Mycat SqlServer Do not have slave connection to use, use master connection instead
Do not have slave connection to use, use master connection instead 很奇怪啊 都是按照配置配置的 怎么就是不通呢 有点怀疑人生了吧 其 ...
- Sql语法高级应用之四:使用视图实现多表联合数据明细
之前章节我们讲到:如果某个表的数据是多个表的联合,并且存在列与列的合并组成新列,用视图是最好的方案. 下面我分享两个个真实的SQL语句案例 USE Wot_Inventory GO FROM sys. ...
- 虚拟机安装MAC OS X 10.9与Windows 7共享文件夹的方法
在虚拟机中安装好MAC OS X后, 把CD/DVD中的ISO映像换成 VMwareWorkstation安装目录下的/darwin.iso, 然后连接上 进入MAC 系统后, 先安装vmware t ...
- 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 ...
- pageadmin CMS 如何添加自定义页面
理论上网站上的所有页面都可以通过栏目管理来添加,那自定义页面的意义是什么呢? 网站的需求是很多样化的,比如需要制作一个对外提供数据的api,甚至制作一个搜索页面,或者制作一些数据和栏目没有对应关系的页 ...
- 201621123023《Java程序设计》第13周学习总结
一.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 二.为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网络同 ...