第一个Android实例——计算器 编辑
学习Android已经有一段时间了,最近一直在啃书,感觉挺充实的~好期待放假,这样可以快点把书看完自己去多做点实例项目,加深理解。
这是之前写的一个计算器小程序,比较简单,但是是自己第一个用Android写出来的小程序,值得纪念噢~
计算器实例
第一部分:计算器布局设计
首选需要new一个Android项目,然后修改界面布局,代码如下
Java代码- <LinearLayoutxmlns: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"
- android:orientation="vertical"
- android:background="#111"
- tools:context="com.example.jisuanqi.MainActivity">
- <TextView
- android:id="@+id/tv"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="#fff"
- android:gravity="right"
- android:layout_margin="5dp"
- />
- <TableLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <TableRow
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <Button
- android:id="@+id/btn1"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="1"/>
- <Button
- android:id="@+id/btn2"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="2"/>
- <Button
- android:id="@+id/btn3"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="3"/>
- <Button
- android:id="@+id/btnjia"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="+"/>
- </TableRow>
- <TableRow
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <Button
- android:id="@+id/btn4"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="4"/>
- <Button
- android:id="@+id/btn5"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="5"/>
- <Button
- android:id="@+id/btn6"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="6"/>
- <Button
- android:id="@+id/btnjian"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="-"/>
- </TableRow>
- <TableRow
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <Button
- android:id="@+id/btn7"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="7"/>
- <Button
- android:id="@+id/btn8"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="8"/>
- <Button
- android:id="@+id/btn9"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="9"/>
- <Button
- android:id="@+id/btncheng"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="*"/>
- </TableRow>
- <TableRow
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <Button
- android:id="@+id/btnclean"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="C"/>
- <Button
- android:id="@+id/btn0"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="0"/>
- <Button
- android:id="@+id/btndengyu"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="="/>
- <Button
- android:id="@+id/btnchu"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="/"/>
- </TableRow>
- </TableLayout>
- </LinearLayout>
预览效果:
虽然看起来还比较硕,但是起码有个样子了...(*^__^*)
第二部分:计算器功能实现
首先需要在主activity中注册组件
Java代码- publicclassMainActivityextendsActivityimplementsOnClickListener{
- privateTextViewtvScreen;
- privateList<Item>items=newArrayList<Item>();
这里引入OnclickListener接口 是在后面绑定按钮设置监听器
然后重写onCreate方法,把布局中的按钮以及textview绑定
Java代码- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- tvScreen=(TextView)findViewById(R.id.tv);
- findViewById(R.id.btn0).setOnClickListener(this);
- findViewById(R.id.btn1).setOnClickListener(this);
- findViewById(R.id.btn2).setOnClickListener(this);
- findViewById(R.id.btn3).setOnClickListener(this);
- findViewById(R.id.btn4).setOnClickListener(this);
- findViewById(R.id.btn5).setOnClickListener(this);
- findViewById(R.id.btn6).setOnClickListener(this);
- findViewById(R.id.btn7).setOnClickListener(this);
- findViewById(R.id.btn8).setOnClickListener(this);
- findViewById(R.id.btn9).setOnClickListener(this);
- findViewById(R.id.btnjia).setOnClickListener(this);
- findViewById(R.id.btnjian).setOnClickListener(this);
- findViewById(R.id.btncheng).setOnClickListener(this);
- findViewById(R.id.btnchu).setOnClickListener(this);
- findViewById(R.id.btndengyu).setOnClickListener(this);
- findViewById(R.id.btnclean).setOnClickListener(this);
- findViewById(R.id.btn0).setOnClickListener(this);
- }
到了这一步,得理清一下算法逻辑。
我们首先得输入一个数字,然后输入运算符号,再输入数字,再执行=号
10+20
一个数字一个操作符号一个数字一个操作符号这样排列
10+20=38
在执行第二个操作符号时前面三项已经可以执行运算了
所以这里需要一个原则:一旦能执行操作运算就执行操作运算,之后再与后面的元素执行相关操作
所以这里可以用数组把这些项都记录下来,然后再做一个判断,判断前面三项是否有三项,就可以执行运算,如果是就执行运算并继续到下一个。
所以接下来再创建一个类Item.java(注意这个类和Mainactivity在一个包里)表示每一项
Java代码- packagecom.example.jisuanqi;
- publicclassItem{
- publicItem(doublevalue,inttype){
- this.value=value;
- this.type=type;
- }
- publicdoublevalue=0;
- publicinttype=0;
- }
以及另一个类表示数据类型Types.java
Java代码- packagecom.example.jisuanqi;
- publicclassTypes{
- publicstaticfinalintjia=1;
- publicstaticfinalintjian=2;
- publicstaticfinalintcheng=3;
- publicstaticfinalintchu=4;
- publicstaticfinalintdengyu=5;
- }
再回到mainactivity里定义一个数组,这个数组是用来存放项的,也就是计算时输入的项。
Java代码- publicclassMainActivityextendsActivityimplementsOnClickListener{
- privateTextViewtvScreen;
- privateList<Item>items=newArrayList<Item>();
然后在onclick()方法中作判断,分别执行不同的操作。
Java代码- publicvoidonClick(Viewv){
- switch(v.getId()){
- caseR.id.btn0:
- tvScreen.append("0");
- break;
- caseR.id.btn1:
- tvScreen.append("1");
- break;
- caseR.id.btn2:
- tvScreen.append("2");
- break;
- caseR.id.btn3:
- tvScreen.append("3");
- break;
- caseR.id.btn4:
- tvScreen.append("4");
- break;
- caseR.id.btn5:
- tvScreen.append("5");
- break;
- caseR.id.btn6:
- tvScreen.append("6");
- break;
- caseR.id.btn7:
- tvScreen.append("7");
- break;
- caseR.id.btn8:
- tvScreen.append("8");
- break;
- caseR.id.btn9:
- tvScreen.append("9");
- break;
- caseR.id.btnjia:
- items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
- checkAndCompute();
- items.add(newItem(0,Types.jia));
- tvScreen.setText("");
- break;
- caseR.id.btnjian:
- items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
- checkAndCompute();
- items.add(newItem(0,Types.jian));
- tvScreen.setText("");
- break;
- caseR.id.btncheng:
- items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
- checkAndCompute();
- items.add(newItem(0,Types.cheng));
- tvScreen.setText("");
- break;
- caseR.id.btnchu:
- items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
- checkAndCompute();
- items.add(newItem(0,Types.chu));
- tvScreen.setText("");
- break;
- caseR.id.btnclean:
- tvScreen.setText("");
- items.clear();
- break;
- caseR.id.btndengyu:
- items.add(newItem(Double.parseDouble(tvScreen.getText().toString()),Types.dengyu));
- checkAndCompute();
- tvScreen.setText(items.get(0).value+"");
- items.clear();
- break;
- default:
- break;
- }
- }
注意这里还需要一个方法进行计算
Java代码- publicvoidcheckAndCompute(){
- if(items.size()>=3){
- doublea=items.get(0).value;
- doubleb=items.get(2).value;
- intopt=items.get(1).type;
- items.clear();
- switch(opt){
- caseTypes.jia:
- items.add(newItem(a+b,Types.dengyu));
- break;
- caseTypes.jian:
- items.add(newItem(a-b,Types.dengyu));
- break;
- caseTypes.cheng:
- items.add(newItem(a*b,Types.dengyu));
- break;
- caseTypes.chu:
- items.add(newItem(a/b,Types.dengyu));
- break;
- default:
- break;
- }
- }
- }
这样一来,计算器功能就已经实现了,下面是虚拟机上的运行效果图:
操作:6+3=9
ps:写完之后发现其实还是有很多缺陷的。。比如没有小数点.,不过把左下方C的按钮换成“.”,然后再到下方加一个专门的clean按钮就可以了~
************************************************华丽的分割线******************************************************************
今天把计算器界面还有功能优化了一下,加入了小数点功能,下方加入了清屏按钮
新增了一个显示框,可以显示算法的步骤。
还加入了按钮选择状态和非选择状态颜色显示不同的功能
其实这个功能并不复杂,在res目录下新建一个drawable文件夹
然后在里面新建xml文件login_button_selector.xml类型为selector
Java代码- <?xmlversion="1.0"encoding="utf-8"?>
- <selectorxmlns:android="http://schemas.android.com/apk/res/android">
- <itemandroid:drawable="@drawable/clr_normal"android:state_pressed="false"/>
- <itemandroid:drawable="@drawable/clr_pressed"android:state_pressed="true"/>
- </selector>
然后在按钮布局中添加一句
Java代码- android:background="@drawable/login_button_selector"
就ok~\(≧▽≦)/~啦啦啦
下面是运行效果截图:
最后就是整个项目的附件:
..试了几次不能上传,所以传到百度云了,下面是链接:
http://yun.baidu.com/share/link?shareid=4106246580&uk=4047395201
更多相关文章
- 安卓巴士真诚送上营养丰富的精美Android大餐
- Android(安卓)GPRS的自动打开与关闭。
- 在 Android(安卓)中调用二进制可执行程序(native executable )
- [Android--Tool]Android如何将他人的代码放入新建的工程中
- Android自带音乐播放器代码分析(2)
- Android(安卓)使用ORMLite打造万能泛型Dao简化数据持久化层
- 从Eclipse迁移代码到Android(安卓)Studio可能出现的异常
- Android学习笔记-保存文件(Saving Files)
- 如何查看Android里面其他应用的数据