【Android开发-4】进入实践,最喜欢折腾的计算器
前言:前面对项目文件有了感性认识。接下来我们就须要通过不断实践,对项目的文件有理性的认识。
曾经折腾Unity3d、IOS开发都是拿计算器开刀。所以这次Android开发实践也不例外,继续拿计算器折腾。通过本人总结。你通过折腾计算器,能够学习掌握到对文本、button、输入框控件的事件监听触发和一些控件读写操作。编程语言能够接触到字符串的切割、拼接、查找等方法使用,还有if-else,switch控制语句的使用;总之通过操作一款简单的计算器,能够基本熟悉该开发环境下的流程和编程语言的使用。
首先展示下折腾的效果:(喜欢看源代码的这里下载:http://download.csdn.net/detail/wyz365889/7728267)

进入折腾步骤
第一步:创建项目,创建完项目文件结构例如以下:
第二步:布局界面,找到项目文件里的layout->activity_main。里面的布局代码编写例如以下:
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.wyz.calc.MainActivity" > <TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="15dp"
android:text="@string/mycalc" /> <EditText
android:id="@+id/displaynum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@id/title"
android:layout_marginBottom="15dp" /> <LinearLayout
android:id="@+id/row1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/displaynum"
android:orientation="horizontal" > <Button
android:id="@+id/btn_num_1"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="1" /> <Button
android:id="@+id/btn_num_2"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="2" /> <Button
android:id="@+id/btn_num_3"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="3" /> <Button
android:id="@+id/btn_add"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:text="+" />
</LinearLayout> <LinearLayout
android:id="@+id/row2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/row1"
android:layout_marginTop="20dp"
android:orientation="horizontal" > <Button
android:id="@+id/btn_num_4"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="4" /> <Button
android:id="@+id/btn_num_5"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="5" /> <Button
android:id="@+id/btn_num_6"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="6" /> <Button
android:id="@+id/btn_sub"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:text="-" />
</LinearLayout> <LinearLayout
android:id="@+id/row3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/row2"
android:layout_marginTop="20dp"
android:orientation="horizontal" > <Button
android:id="@+id/btn_num_7"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="7" /> <Button
android:id="@+id/btn_num_8"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="8" /> <Button
android:id="@+id/btn_num_9"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="9" /> <Button
android:id="@+id/btn_mul"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:text="*" />
</LinearLayout> <LinearLayout
android:id="@+id/row4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/row3"
android:layout_marginTop="20dp"
android:orientation="horizontal" > <Button
android:id="@+id/btn_num_0"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="0" /> <Button
android:id="@+id/btn_douhao"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="·" /> <Button
android:id="@+id/btn_equal"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="=" /> <Button
android:id="@+id/btn_div"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:text="/" />
</LinearLayout> <LinearLayout
android:id="@+id/row5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/row4"
android:layout_marginTop="20dp"
android:orientation="horizontal" > <Button
android:id="@+id/btn_ce"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:text="CE" /> <Button
android:id="@+id/btn_del"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_weight="1"
android:text="Del" />
</LinearLayout> </RelativeLayout>
注:主要用到五大布局中的相对布局RelativeLayout和线性布局LinearLayout。还有就是布局中它们带有的属性。布局文件我们也就先感性认识,慢慢实践。然后升到理性。
第三步:编写主代码,找到项目文件里的src下的MainActivity.java,里面的代码编写例如以下:
package com.wyz.calc; import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity {
Button btn_num_1;
Button btn_num_2;
Button btn_num_3;
Button btn_num_4;
Button btn_num_5;
Button btn_num_6;
Button btn_num_7;
Button btn_num_8;
Button btn_num_9;
Button btn_num_0;
Button btn_douhao;
Button btn_equal;
Button btn_add;
Button btn_sub;
Button btn_mul;
Button btn_div;
Button btn_ce;
Button btn_del; EditText displayText; int ioperator=0; //操作符标志1代表+,2代表-,3代表*,4代表/
double result=0; //计算结果
double num1=0; //第一个操作数
double num2=0; //第二个操作数 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //依据R中记录的控件id找到界面的控制对象
btn_num_1 = (Button)findViewById(R.id.btn_num_1);
btn_num_2 = (Button)findViewById(R.id.btn_num_2);
btn_num_3 = (Button)findViewById(R.id.btn_num_3);
btn_num_4 = (Button)findViewById(R.id.btn_num_4);
btn_num_5 = (Button)findViewById(R.id.btn_num_5);
btn_num_6 = (Button)findViewById(R.id.btn_num_6);
btn_num_7 = (Button)findViewById(R.id.btn_num_7);
btn_num_8 = (Button)findViewById(R.id.btn_num_8);
btn_num_9 = (Button)findViewById(R.id.btn_num_9);
btn_num_0 = (Button)findViewById(R.id.btn_num_0); btn_douhao = (Button)findViewById(R.id.btn_douhao);
btn_equal = (Button)findViewById(R.id.btn_equal);
btn_add = (Button)findViewById(R.id.btn_add);
btn_sub = (Button)findViewById(R.id.btn_sub);
btn_mul = (Button)findViewById(R.id.btn_mul);
btn_div = (Button)findViewById(R.id.btn_div);
btn_ce = (Button)findViewById(R.id.btn_ce);
btn_del = (Button)findViewById(R.id.btn_del); displayText = (EditText)findViewById(R.id.displaynum); BtnListener btnListener = new BtnListener(); //创建事件监听器 btn_num_1.setOnClickListener(btnListener); //绑定监听器
btn_num_2.setOnClickListener(btnListener);
btn_num_3.setOnClickListener(btnListener);
btn_num_4.setOnClickListener(btnListener);
btn_num_5.setOnClickListener(btnListener);
btn_num_6.setOnClickListener(btnListener);
btn_num_7.setOnClickListener(btnListener);
btn_num_8.setOnClickListener(btnListener);
btn_num_9.setOnClickListener(btnListener);
btn_num_0.setOnClickListener(btnListener);
btn_douhao.setOnClickListener(btnListener);
btn_equal.setOnClickListener(btnListener);
btn_add.setOnClickListener(btnListener);
btn_sub.setOnClickListener(btnListener);
btn_mul.setOnClickListener(btnListener);
btn_div.setOnClickListener(btnListener);
btn_ce.setOnClickListener(btnListener);
btn_del.setOnClickListener(btnListener); } //自己创建个按钮监听器类,实现接口OnClickListener,实现接口onclick方法
class BtnListener implements OnClickListener
{ @Override
public void onClick(View v) {
CharSequence nowText = displayText.getText(); //每次按下时,先获取显示的文本内容
String myString=nowText.toString(); //转化成字符串 switch(v.getId())
{ case R.id.btn_num_1:
myString+="1";
num1=Double.parseDouble(myString); break;
case R.id.btn_num_2:
myString+="2";
num1=Double.parseDouble(myString);
break;
case R.id.btn_num_3:
myString+="3";
num1=Double.parseDouble(myString);
break;
case R.id.btn_num_4:
myString+="4";
num1=Double.parseDouble(myString);
break;
case R.id.btn_num_5:
myString+="5";
num1=Double.parseDouble(myString);
break;
case R.id.btn_num_6:
myString+="6";
num1=Double.parseDouble(myString);
break;
case R.id.btn_num_7:
myString+="7";
num1=Double.parseDouble(myString);
break;
case R.id.btn_num_8:
myString+="8";
num1=Double.parseDouble(myString);
break;
case R.id.btn_num_9:
myString+="9";
num1=Double.parseDouble(myString);
break;
case R.id.btn_num_0:
myString+="0";
num1=Double.parseDouble(myString);
break;
case R.id.btn_douhao:
if(!myString.contains(".")) //假设已经有.,就不加了
{
myString+=".";
} break; case R.id.btn_add:
ioperator = 1;
num2=Double.parseDouble(myString);
myString="";
break;
case R.id.btn_sub:
ioperator = 2;
num2=Double.parseDouble(myString);
myString="";
break;
case R.id.btn_mul:
ioperator = 3;
num2=Double.parseDouble(myString);
myString="";
break;
case R.id.btn_div:
ioperator = 4;
num2=Double.parseDouble(myString);
myString="";
break; case R.id.btn_equal:
if(myString.isEmpty()) //假设获得字符串为空。不操作
{
break;
}
num1=Double.parseDouble(myString); if(ioperator == 1)
{
result = num1 + num2;
}
else if(ioperator == 2)
{
result = num2-num1 ;
}
else if(ioperator == 3)
{
result = num1*num2;
}
else if(ioperator == 4)
{
result = num2/num1;
}
num2=result;
num1=0;
long tmp=0;
if(result%1.0 == 0) //去掉整数后面的小数点
{
tmp=(long)result;
myString = String.valueOf(tmp);
}
else
{
myString = String.valueOf(result);
} break;
case R.id.btn_ce:
num1=0;
num2=0;
result=0;
ioperator=0;
myString="";
break;
case R.id.btn_del: if(myString.length() != 0) //不为空才干够删
{
myString=myString.substring(0, myString.length()-1); } break;
default:
break;
}
//调试信息
Log.d("debugnum1", String.valueOf(num1));
Log.d("debugnum2", String.valueOf(num2));
Log.d("myString", myString);
displayText.setText(myString);
}
} @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;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
主要思路是:
1.声明界面上面的控制变量和要用到的变量
2.通过findViewById找到布局文件里的控件对象,并把对象赋给声明相应的变量
3.写个类监听器,实现button监听器接口,当控件被点击时触发
4.控件变量。绑定监听器
5.開始在类监听器中。写触发事件业务处理的逻辑
第四步:到此基本完毕,剩下的就是调试找bug
注:本人调试主要通过Log.d()把打印信息到输出日志控制台LogCat
【Android开发-4】进入实践,最喜欢折腾的计算器的更多相关文章
- (转)Android开发:性能最佳实践-管理应用内存
翻自:http://developer.android.com/training/articles/memory.html 在任何软件开发环境中,RAM都是宝贵的资源,但在移动操作系统中更加珍贵.尽管 ...
- Android开发MVP模式解析
http://www.cnblogs.com/bravestarrhu/archive/2012/05/02/2479461.html 在开发Android应用时,相信很多同学遇到和我一样的情况,虽然 ...
- android开发学习 几个有用的学习资料~
<Android高级应用开发-基础篇> 针对Android基础入门课程,包含了Android四大件基础.UI,Launcher等等.这个课程学习之后也是进一步深入的基础. <Andr ...
- 【绝对给力】Android开发免豆资料(教程+工具+源码)地址汇总
教程下载: [免费]android界面效果全汇总.pdf http://down.51cto.com/data/209179 Android终极开发教程[pdf高清版] http://down.51c ...
- [转]Android开发最佳实践
——欢迎转载,请注明出处 http://blog.csdn.net/asce1885 ,未经本人同意请勿用于商业用途,谢谢—— 原文链接:https://github.com/futurice/and ...
- Android 开发实践 ViewGroup 实现左右滑出窗口(二)
接上一篇 <Android 开发实践 ViewGroup 实现左右滑出窗口(一)http://www.cnblogs.com/inkheart0124/p/3532862.html> 源码 ...
- Android开发:最详细的 NavigationDrawer 开发实践总结
最详细的 NavigationDrawer 开发实践总结 继前面写的两篇文章之后(有问题欢迎反馈哦): Android开发:Translucent System Bar 的最佳实践 Android开发 ...
- Android 开发实践 ViewGroup 实现左右滑出窗口(一)
利用假期把以前做的东西总结整理一下,先从简单的开始吧.实现的效果是这样的: 做了个截屏动画,比例有点不对了,凑合着看吧. 整个窗口有3部分组成,中间的主界面是个列表,左边的滑出界面是个菜单,右边的 ...
- 在mac本上折腾android 开发环境
众所周知的原因,google的很多网站在国内无法访问,苦逼了一堆天朝程序员,下是在mac本上折腾android 开发环境的过程: 一.先下载android sdk for mac 给二个靠谱的网址: ...
随机推荐
- 使用Spring AOP切面解决数据库读写分离
http://blog.jobbole.com/103496/ 为了减轻数据库的压力,一般会使用数据库主从(master/slave)的方式,但是这种方式会给应用程序带来一定的麻烦,比如说,应用程序如 ...
- OpenCV2:第八章 视频操作
一.简介 OpenCV提供了专门操作视频的接口类VideoCapture类,可以从文件或摄像设备中读取视频
- 框模型中设置内容区域元素占地尺寸box-sizing属性
盒子模型有两种 一种是 内容盒子模型(content-box)一种是边框盒子模型(border-box). content-box:设置的尺寸,只设置内容区域, 左外边距+左边框+左内边距+内容区域宽 ...
- HTML中pre标签的用法
我们经常会在要保持文本格式的时候使用pre标签,比如当我们要展示源代码的时候,只要放一个pre标签,然后把源代码直接复制,粘贴,然后在页面上就可以保持好格式.不会像放在其它标签里那样,把换行和空格都自 ...
- Openjudge-4132-四则运算表达式求值
这一题我们可以通过递归求解,首先我们可以把一个表达式分为三部分,分别是: (1)表达式 :项.加减 (2)项:因子.乘除 (3)因子:数.()表达式 这三项构成了递归的关系,我们可以看到,要求一个表达 ...
- 哈理工(HUST)第八届程序设计竞赛--小乐乐的组合数
这道题目是一道数学题,我们可以假设n为7,m为14. 这样的话我们就可以很清晰地看到7和7可以拼接在一起,这是一对,然后是7和14拼接在一起,第二对. 我们可以直接让n/7,m/7,这样就是1*2,就 ...
- poj-1163 动态规划
这道题目并不能直接使用递归,因为 7(1) 7(1) 7(1) 7(1) 7(2) 7(1) 7(1) 7(3) 7(3) ...
- day23 01 类的命名空间
day23 01 类的命名空间 一.初识面向对象复习 定义类: class 函数:方法 动态属性 变量:类属性 静态属性 过程: (1)_init_方法:初始化:def _init_(self,参数 ...
- resultType返回的是集合中的元素类型
https://www.cnblogs.com/start-fxw/p/5900087.html
- Leetcode 227.基本计算器II
基本计算器II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: " ...