第一个Android项目——计算器

第一个Android项目——计算器

效果

开始学Android一两个星期了,学习了一下基本的Activity、简单控件及几个简单布局,打算找个东西来练练手,于是就选择发计算器。关于计算器中用到的四则运算在上一篇博客表达式(四则运算)计算的算法中已经讲了。这里不再赘述。

先看一下要达成的效果图:

1

 

这里只用到了一个Activity,EditTextButton两个控件组成,所以比较简单。

布局

这里用到了三种布局:

LinearLayout 一个整体的垂直的线性布局

有几个属性解释一下:

 android:layout_width="match_parent"  layout宽度,match_parent匹配父控件,在这里就是Activity

 android:layout_height="match_parent"  layoutr 高度

 android:orientation="vertical"  定义为垂直方向

 tools:context=".MainActivity"  对应的Activityjava文件

RelativeLayout相对布局,用于控制backspaceclear按钮

android:layout_alignParentTop="true"  与父窗口顶部对齐

android:layout_toLeftOf="@+id/clear" clear组件的大侧

android:layout_alignParentRight="true"  与父窗口右端对齐

 

android:padding="18dip"  组件之前的空隙

android:gravity="center"  组件中文本的对齐方式

 

TableLayout  一个4*5的表格布局,用于存放数字和符号按钮

 

事件监听

我知道的事件监听有两种方式:

一种是先获得控件的对象,再通过控件对象设置监听setOnClickListener()如:

Button backspace = (Button)findViewById(R.id.backspace);

backspace.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

 

}

}

);

 

另一种方法是定义一个方法,通过getTag获得控件,然后为多个控件添加监听事件。

public void onClickTransaction(View v) {

// backspace and clear

if ("backspace".equals(v.getTag())) {

//do something

} else if ("clear".equals(v.getTag())) {

//do something

}

}

 

然后在xml文件中对应的控件上设置该监听的函数名

 <Button

      android:onClick="onClickTransaction"

      android:tag="1"

      android:layout_height="fill_parent"

      android:id="@+id/row0col0"

      android:layout_gravity="center_vertical"

      android:gravity="center"

      android:padding="2dip"

      android:text="@string/row0col0" >

</Button>

 

 

PS:

我在做这个项目的时候遇到一个很诡异的问题,大家交流一下。在我做出了整体的布局如上面的图1中的时候,相应的监听也加进去了,监听都没有问题。在加最后一个“=”按钮的监听时就不行了,一点按钮就崩溃,后面把最后一个按钮的监听事件去掉了,还是有问题。找了半天没有找到,叫老师过来用debug找了半个小时也没有找到什么错误。后来我一个同学,帮我一点点地试,发现好像什么id生成错误,后面eclipseproject/clean...清除一下缓存,重新编译一下,一切问题都没有了,运行良好。

当你遇到一些比较诡异的问题老是解决不了,你也不防试一下eclipseproject/clean清除一下缓存,也许问题就解决了。

 

 

项目下载:http://download.csdn.net/download/luoweifu/6041661

原文地址:https://www.cnblogs.com/suncoolcat/p/3294007.html