第一个Android项目——计算器
效果
开始学Android一两个星期了,学习了一下基本的Activity、简单控件及几个简单布局,打算找个东西来练练手,于是就选择发计算器。关于计算器中用到的四则运算在上一篇博客表达式(四则运算)计算的算法中已经讲了。这里不再赘述。
先看一下要达成的效果图:
图1
这里只用到了一个Activity,有EditText、Button两个控件组成,所以比较简单。
布局
这里用到了三种布局:
LinearLayout:一个整体的垂直的线性布局
有几个属性解释一下:
android:layout_width="match_parent"layout宽度,match_parent匹配父控件,在这里就是Activity
android:layout_height="match_parent"layoutr高度
android:orientation="vertical"定义为垂直方向
tools:context=".MainActivity"对应的Activity的java文件
RelativeLayout:相对布局,用于控制backspace和clear按钮
android:layout_alignParentTop="true"与父窗口顶部对齐
android:layout_toLeftOf="@+id/clear"在clear组件的大侧
android:layout_alignParentRight="true"与父窗口右端对齐
android:padding="18dip"组件之前的空隙
android:gravity="center"组件中文本的对齐方式
TableLayout一个4*5的表格布局,用于存放数字和符号按钮
事件监听
我知道的事件监听有两种方式:
一种是先获得控件的对象,再通过控件对象设置监听setOnClickListener();如:
Buttonbackspace=(Button)findViewById(R.id.backspace);
backspace.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
}
}
);
另一种方法是定义一个方法,通过getTag获得控件,然后为多个控件添加监听事件。
publicvoidonClickTransaction(Viewv){
//backspaceandclear
if("backspace".equals(v.getTag())){
//dosomething
}elseif("clear".equals(v.getTag())){
//dosomething
}
}
然后在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生成错误,后面eclipse的project/clean...清除一下缓存,重新编译一下,一切问题都没有了,运行良好。
当你遇到一些比较诡异的问题老是解决不了,你也不防试一下eclipse的project/clean清除一下缓存,也许问题就解决了。