id="@+id/ed_led"android:
layout_width="fill_parent"android:
layout_height="wrap_content"
android:
gravity="left"
android:
text=""
android:
textSize="37px"
android:
layout_marginBottom="20px"
android:
layout_marginLeft="10px"
android:
layout_marginRight="10px"
android:
editable="false"
android:
cursorVisible="false"
android:
layout_weight="1"/>
显示区中使用的是基于增强型的图形用户界面EditText,利用此类的功能,在显示模块中完成了以上设置。
显示模块声明了这些设置,在用户使用系统的时候,会在协同布局设置一同完成以上设置,使用户在使用的时候可以直观的看到显示区的样子。
一般情况下都会选择差不多的字体,所以此处选择的字体和键盘上显示的字体其实是一样的,但是事实上系统中进行了两次声明,即逻辑上这是两种不同的字体,以及设置字符串text为空。
显示区和输入模块中的表格一样,同样分别设置了最小显示以及完美显示这两种状态。
然后声明了显示区的画法,画法中包括了显示区的两个矩形组成的显示框,显示框的颜色和大小以及显示框中显示的文字所使用的字体,还有文字在显示框中的位置。
最后设置了计算模块中的变量得到以及改变显示中所显示的内容的方法,当显示中的内容发生变化时,系统会运行repaint命令来重画显示区,由于使用的是比较低级的方法,所以只能通过整个显示区来实现显示更新这个命令。
这样虽然和使用高级的方法相比速度上可能有点慢,但是由于时间相差的不是很多,在用户的正常使用中是不会有所感觉的。
以上就是显示模块的具体实现流程。
第四章概要设计
4.1系统体系结构
计算模块则主要描述了计算器的整体,实现了计算器的界面,定义了用户单击的处理办法,通过定义的处理办法来完成用户的操作命令,实现用户的计算要求,这些计算要求包括了数值的输入,小数点的输入,正负号的输入,记忆相关功能的完成,加、减、乘、除等各种计算功能的完成,运算符的替换,初始化系统等等。
按键监听同时监听了触屏上的按键和键盘上的按键,其中按键的监听使用了的松开为判断的标准,即用户松开按键的时候程序才会读取数据。
计算模块是整个系统的主体部分,整个计算器功能是通过Jisuanq2Activity.java来实现的。
首先,我使用一个数组btn来分别监控十个数字键,用et_led来监控输入内容,用btn_div、btn_mul、btn_sub、btn_plus、btn_equal、btn_dot,分别来表示除法、乘法、减法、加法、等号、点号,具体实现如下代码:
privateButton[]btn=newButton[10];
privateEditTextet_led;
privateButtonbtn_div,btn_mul,btn_sub,btn_plus,btn_equal,btn_dot;
其次,对内容的操作。
当有内容输入时,首先接收内容,接受的内容分为两部分:
当输入为数据时,则是通过传递给数组str,根据数据的传递判断数据内容的长度,如果没有内容输入则,则通过et_led.setText()为0,如果有数据输入的时候,则通过et_led.setText()显示数据,并且将第一次输入的数据保存predata;当输入为符号时,像“+、-、*、/、C、ON、OFF”时,然后对符号进行判断,具体实现代码如下:
privateOnClickListeneractionPerformed=newOnClickListener(){
publicvoidonClick(Viewv){
Stringcommand=((Button)v).getText().toString();
str=et_led.getText().toString();
if(pareTo("Bksp")==0){
if(str.length()>1)
et_led.setText(str.substring(0,str.length()-1));
elseif(str.length()==1){
et_led.setText("0");
vbegin=true;
}
if(et_led.getText().toString().compareTo("-")==0){
et_led.setText("0");
vbegin=true;
}
}
elseif„„„„„„„„„„„„„;
}
}
最后,当第二次输入数据的时候,将会数据存到temp,再根据上次输入的符号进行运算,然后将结果保存在temp,如果按键“=”,则会将将结果输出,如果是其他的符号,则会进行相应的运算。
程序结构图如下:
参照程序的流程图,设计十个Activity。
分别为进入页面的Activity,选择运算的Activity,剩下八个分别为输入数据的Activity和显示运算结果的Activity,如图2。
在这里应该注意的是每当创建一个新的class,就要继承Activity。
需要用到publicclassjisuanqiextendsActivity这句代码因此整理好程序的流程是关键,设计好Activity之间的Intent链接是关键。
程序所需的Activity相应的,需要在res/layout文件夹中建立3个XML文件来对上述的十个Activity进行布局,如图4-4:
总体上所需要的Activity和XML布局文件已经建立完毕,下面开始对进入计算器的Activity进行编写,首先在布局文件main.xml中创建两个Button按钮,并且对两个按钮声明ID和布局。
两个Button按钮显示为“开始计算”和“退出”如图4-5:
然后在jisuanqi.java中,首先要声明Button按钮用到如下代码:
privateButtonbutton1privateButtonbutton2在安卓里面,用ID找控件是个非常方便的方法,使用findViewById方法来找到在XML文件中创建的对象。
因此在jisuanqi.java中,同样需要使用findViewById方法来找到两个Button控件,代码如下:
button1=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
接下来开始编辑第二个Activity,也就是选择运算法则的界面,本界面需要创建4个Button按钮,分别为加、减、乘、除。
Id分别为button3、button4、button5、button6。
再下来以加法页面为例,在本页面当中需要创件两个EditText,一个TextView,还有一个Button按钮,TextView显示为“加上”,Button按钮显示为“计算”三个Activity创建完成后,我们需要实现以下动作:
在用户打开软件之后,点击“开始计算”,然后跳转到选择运算法则的界面,当用户点击“加”则程序进入加法界面。
由此可见,在整个动作中,需要使用侦听代码来识别用户的操作,然后使用Intent来实现Activity的切换。
我们以开始界面跳转到选择运算法则界面为例:
首先在“开始计算”按钮上设置侦听代码如下:
button1.setOnClickListener(newbutton1Listener());
然后开始侦听,当用户点击“开始计算”时,启动Intent来将本界面切换到选择运算法则的界面,在这里需要JAVA中侦听的方法和Intent方法,代码如下:
classbutton1ListenerimplementsOnClickListener{
@Override
publicvoidonClick(Viewv){
//生成一个Intent对象
Intentintent=newIntent();
intent.setClass(jisuanqi.this,Activityone.class);
jisuanqi.this.startActivity(intent);
}
}
在这句代码当中intent.setClass(jisuanqi.this,Activityone.class);是规定了本次跳转是从哪个Activity跳转到Activity,在这里是从jisuanqi.java跳转到Activity.java。
完成了Activity之间的切换,下面我们开始进行运算的编辑,在加法界面,我们编写如下代码来实现将用户输入的两个数传送到Intent中:
//生成一个Intent对象
//取得两个值
StringFactorOnestr=FactorOne.getText().toString();
StringFactorTwostr=FactorTwo.getText().toString();
//取得两个值放在Intent中
Intentintent=newIntent();
intent.putExtra("one",jiashuoneStr);
intent.putExtra("two",jiashutwoStr);
//使用这个Intent来激活答案页
intent.setClass(plus.this,resultplus.class);
plus.this.startActivity(intent);
接下来要进行的是显示答案的Activity的编写,在这里我们要注意的是Intent传过来的是两个字符串,字符串是不能相加的,因此我们要将两个字符串强制转换为整形,然后才可以相加,代码如下:
plusresult=(TextView)findViewById(R.id.plusresult);
//得到Intent对象当中的值
Intentintent=getIntent();
StringFactorOnestr=FactorOne.getText().toString();
StringFactorTwostr=FactorTwo.getText().toString();
//将字符串转为整形
Log.i("FactorOnestr",FactorOnestr);
Log.i("FactorTwostr",FactorTwostr);
//计算两数之和
intresult=jiashuone+jiashutwo;
plusresult.setText(result+"");
减法,乘法,除法的界面类似于加法的界面,这里不再过多介绍了。
最后需要注意的是要在AndroidMainfest.xml文件中将所有的Activity进行注册,然后才可以运行。
4.2用户界面设计
4.2.1计算器界面
图4.2.1
4.2.2小数点运算界面
图4.2.2
4.2.3负数运算界面
图4.2.3
4.2.4开方运算界面
图4
第5章详细设计
5.1数据输入模块
系统如果想完成计算器中的各种功能,首先用户要能进行数据输入,由于是在触屏手机上开发计算器程序,所以要求输入可以直接使用触屏进行,所以在设计的时候就要充分的考虑要这一点。
正是由于考虑到这个特殊的地方,所以在进行模块设计中,选择编写输入模块类的时候会特意选取使用了可以支持触屏输入的特殊增强型图形用户界面类。
输入模块主要的任务是描述计算器键盘以及实现键盘的监听,即当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法,本模块还需要为系统提供了一个较为直观的键盘图形用户界面。
5.2数据显示模块
作为手机计算器系统,显示部分也是必不可少的一部分。
没有显示部分就没有办法显示用户输入的数字是否正确,甚至不能显示计算出的结果,由此可见显示模块即包括输入的部分也包括输出的部分。
显示模块主要要完成的任务是描述计算器的显示区,该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。
同时本模块还将提供调用和设置显示的具体方法。
5.3数据计算功能模块
系统要完成整个的计算器的计算功能,那么计算模块就是整个系统的重点模块。
没有计算模块系统就不能顺利的完成计算,就无法达到用户的要求。
所以计算模块的设计也是本次系统设计中的重点。
系统想要能在屏幕上显示出计算器的样子要有整体的布局,在本模块中要完成布局的具体设计,使用户能够看到整个计算器的画面。
同时系统想完成计算功能必须要处理用户的输入,当输入模块的监听传到计算模块中时,计算模块就要根据相应的方法进行进一步的处理。
这部分主要是对输入进行的逻辑判断,基本会通ifelse来实现逻辑判断。
packagecom.android.calculator;
importjava.math.BigDecimal;
importjava.math.RoundingMode;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.text.Editable;
importandroid.text.Selection;
importandroid.view.View;
import