Android课程设计报告--Android智能手机软件开发.doc_第1页
Android课程设计报告--Android智能手机软件开发.doc_第2页
Android课程设计报告--Android智能手机软件开发.doc_第3页
Android课程设计报告--Android智能手机软件开发.doc_第4页
Android课程设计报告--Android智能手机软件开发.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河北科技大学课程设计报告学生姓名: 学 号: 专业班级: 计算机 班 课程名称: Android智能手机软件开发 学年学期: 2011学年 第一学期 指导教师: 高凯 2 0 11 年 12 月课程设计成绩评定表学生姓名学 号成绩专业班级起止时间2011.09-2012.01设计题目设计编写一个简单的计算器指导教师评语指导教师: 年 月 日一、概述设计编写一个能在Android系统下运行的计算器,除了能实现四则运算外,还带有菜单的功能。菜单中拥有的Item有:1退出键按下时弹出一个对话框提示是否确认退出;2帮助键按下后显示帮助信息,并能从帮助界面返回到主界面;3About键按下后弹出就算器的版本信息;4换肤键按下后更换皮肤。二、项目设计与实现先写好布局文件,代码如下: 说明:此Activity采用嵌套式LinearLayout布局,最外层的LinearLayout嵌入六个LinearLayout,此时LinearLayout的android:orientation=vertical即采用垂直布局。嵌入的六个LinearLayout除第一个采用垂直布局外其他的均采用水平布局。第一个LinearLayout控制两个EditText的位置,剩下的五个LinearLayout控制20个按钮的布局。为使软件能适应不同分辨率的手机,所有控件的layout_width和layout_height属性都设为fill_parent,而控制按钮大小通过设置layout_weight的大小来控制。这样控件的大小就只和屏幕大小和控件占屏幕的比例有关。显示效果如下:Activity的界面计算器的基本功能实现接下来就是对各个按钮绑定监听器,实现算术式的输入功能和计算输入的算术式值的功能。根据各个按钮的功能可将将它们分为四类:Clean按钮为一类,Delete为一类,等号按钮为一类,其他的作为基本算式输入按钮可看做一类。由此写四个监听器类,分别实现按钮的各个功能。Clean功能是清空两个Edittext中的内容,实现原理也就是Clean按钮绑定的监听器,代码如下:/清除功能 class clearListener implements OnClickListener public void onClick(View v) / TODO Auto-generated method stub edittext1.setText(null); edittext2.setText(null); tem=; tem1=; Delete功能相关代码是为:/删除功能,删除之后光标不移动 class deleteListener implements OnClickListener public void onClick(View v) / TODO Auto-generated method stubint index=edittext1.getSelectionStart();/获得光标位置int l=tem.length();if(l=0|index=0)edittext1.setText(tem);edittext1.setSelection(0);else if(l=1)tem=;edittext1.setText(tem);elseString tem2=;tem2=tem.substring(index, l);tem=tem.substring(0,index-1);edittext1.setText(tem+tem2);edittext1.setSelection(tem.length();tem=tem+tem2;/edittext1.setSelection(index-1); 点击等号按钮后,能计算输入算式的值并将结果显示在第二个文本框中,实现代码如下:/等号功能class dengListener implements OnClickListenerpublic void onClick(View arg0) / TODO Auto-generated method stubString str=edittext1.getText().toString();ExpressionParser ep=new ExpressionParser(str);try double result=ep.parse();String result_str=String.valueOf(result);edittext2.setText(result_str); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace();edittext2.setText(ERROR);其中ExpressionParser为一个封装类,其实现的功能为计算出用字符串表示的素数表达式的值。计算用字符串表示的计算式的基本原理为:1. 创建两个堆栈,一个用来放数据(numStack),一个用来放算术符(chStack);2. 从左到右读入算术式,如果读到的是数字,则压入(push)到数据堆栈(numStack)中。若读到的是算术符,先判断chStack栈顶元素,若栈顶元素优先级大于读到的算术符,则先将栈顶元素和numStack中两个数拿出来计算,再将读到的算术符压入chStack中,若读到的算术符优先级大于栈顶元素,则将读到的算术符压入chStack中。如果读到的是右括号则不断将chStack和numStack中的内容拿出来计算,直到从chStack中拿出左括号为止;3. 若读到了算术式的最后,则将两堆栈中的内容全拿出来计算,最后结果放在numStack中。这里的左括号的优先级最低,其次为加号和减号,最高为乘号和除号。基本算式输入按钮实现的功能不仅要能输入基本的数字和算术符,还要有简单的纠错功能,如不能连续输入两个小数点、右括号数必须和左括号数对应、不能连续输入两个加减乘除等。Menu设计使用Menu菜单实现退出、查看帮助文档、更换皮肤和查看版本信息的功能,如图6.12所示。图6.12 菜单界面菜单可以采用xml实现,先在res文件夹中新建Android XML File,选择Menu类型,如图6.13所示:图6.13 新建XML文件之后,此XML文件保存在layout文件夹下面的Menu文件夹下。然后在menu.xml文件中添加需要添加的item,这里添加“Exit”、“Help”、“Skin”、“About”四个Item,相关代码如下: Menu类型的布局文件采用Linearlayout布局方式,不能改变,系统自动根据加入item的多少设置显示行数,如若本示例中只加入两个按钮,则只会显示一行。当然,只有布局文件是不能在Activity中显示Menu菜单的,还得在主程序中加入相应代码。public boolean onCreateOptionsMenu(Menu menu) MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); inflate方法是菜单层次从一个指定的xml资源去填充,这里指定的是前面所写的menu.xml,如果有错误会抛出InflateException信息。接下来就是给各个item添加功能了。这里采用调用onOptionsItemSelected(MenuItem item)方法实现。各个item实现的功能是:点击“Exit”退出计算器并弹出确认退出对话框;点击“Help”转换Activity,显示帮助信息;点击“about”显示计算器版本信息对话框;点击“Skin”跟换计算器皮肤。public boolean onOptionsItemSelected(MenuItem item) / TODO Auto-generated method stub if(item.getItemId()=R.id.exit) /弹出对话框,提示是否退出 Builder exitAlert=new AlertDialog.Builder(Calculator.this); exitAlert.setIcon(R.drawable.warning); exitAlert.setTitle(Warning); exitAlert.setMessage(Are you sure to exit?);/添加YES按钮 exitAlert.setNeutralButton(YES, new DialogInterface.OnClickListener() public void onClick(DialogInterface arg0, int arg1) / TODO Auto-generated method stub /点击YES时退出计算器Calculator.this.finish(););/添加No按钮 exitAlert.setNegativeButton(NO, new DialogInterface.OnClickListener() public void onClick(DialogInterface arg0, int arg1) / TODO Auto-generated method stub/点击NO按钮时什么也不做,默认回到原Activity); exitAlert.create();/创建对话框 exitAlert.show();/显示对话框 if(item.getItemId()=R.id.about) /弹出对话框,显示版本信息 Builder exitAlert=new AlertDialog.Builder(Calculator.this); exitAlert.setIcon(R.drawable.dragon); exitAlert.setTitle(Dragon声明:); exitAlert.setMessage(绝版产品,个人制作,如有雷同,不属抄袭); exitAlert.setNegativeButton(OK, new DialogInterface.OnClickListener() public void onClick(DialogInterface arg0, int arg1) / TODO Auto-generated method stub); exitAlert.create(); exitAlert.show(); if(item.getItemId()=R.id.help) Intent intent=new Intent(); intent.setClass(Calculator.this,Help.class); Calculator.this.startActivityForResult(intent, 10); if(item.getItemId()=R.id.skin)/更换皮肤,这里只需要更改按钮的图片及背景 if(!changed) Calculator.this.getWindow().getDecorView().setBackgroundColor(Color.GRAY); button0.setImageResource(R.drawable.ling); button1.setImageResource(R.drawable.yi); button2.setImageResource(R.drawable.er); button3.setImageResource(R.drawable.san); button4.setImageResource(R.drawable.si); button5.setImageResource(R.drawable.wu); button6.setImageResource(R.drawable.liu); button7.setImageResource(R.drawable.qi); button8.setImageResource(R.drawable.ba); button9.setImageResource(R.drawable.jiu); buttonjia.setImageResource(R.drawable.add); buttonjian.setImageResource(R.drawable.sub); buttoncheng.setImageResource(R.drawable.mul); buttonchu.setImageResource(R.drawable.div); buttondeng.setImageResource(R.drawable.equ); buttondian.setImageResource(R.drawable.point); buttonl.setImageResource(R.drawable.zuo); buttonr.setImageResource(R.drawable.you); buttonclean.setImageResource(R.drawable.qingkong); buttondelete.setImageResource(R.drawable.shanchu); changed=true; else Calculator.this.getWindow().getDecorView().setBackgroundColor(Color.BLACK); button0.setImageResource(R.drawable.zero); button1.setImageResource(R.drawable.one); button2.setImageResource(R.drawable.two); button3.setImageResource(R.drawable.three); button4.setImageResource(R.drawable.four); button5.setImageResource(R.drawable.five); button6.setImageResource(R.drawable.six); button7.setImageResource(R.drawable.seven); button8.setImageResource(R.drawable.eight); button9.setImageResource(R.drawable.nine); buttonjia.setImageResource(R.drawable.jia); buttonjian.setImageResource(R.drawable.jian); buttoncheng.setImageResource(R.drawable.cheng); buttonchu.setImageResource(R.drawable.chu); buttondeng.setImageResource(R.drawable.deng); buttondian.setImageResource(R.drawable.dian); buttonl.setImageResource(R.drawable.left); buttonr.setImageResource(R.drawable.right); buttonclean.setImageResource(R.drawable.clean); buttondelete.setImageResource(R.drawable.delete); changed=false; return super.onOptionsItemSelected(item) ; 按“Exit”和“About”后显示效果如图6.14所示:图6.14 显示效果Java 代码为:package LEO.Calculator;import java.io.InputStream;import org.apache.http.util.EncodingUtils;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class Help extends Activity implements OnClickListenerprivate Button button;private TextView textView; public void onCreate(Bundle savedInstanceState) String res = ;/初始化显示结果try InputStream in = getResources().openRawResource(R.drawable.text); /创建输入流int length = in.available(); byte buffer = new bytelength; in.read(buffer); /res = EncodingUtils.getString(buffer, UTF-8);/res = EncodingUtils.getString(buffer, UNICODE); /res = EncodingUtils.getString(buffer, BIG5);/繁体中文res = EncodingUtils.getString(buffer, GB2312);/简体中文/依text.txt的编码类型选择合适的编码,如果不调整会乱码in.close(); catch(Exception e) e.p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论