基于Android的在线电子书阅读器报告

基于Android的在线电子书阅读器报告
基于Android的在线电子书阅读器报告

期末作品报告

课程名称: Android应用程序开发

学号:

姓名:

班别:

1

引言

在这个快节奏的时代,人们的空余时间越来越零碎,而且人们对智能手机的依赖越来越重,所以,一个拥有丰富功能且能随时进行电子书阅读的在线小说阅读器的出现,则是我们刻不容缓的事情。

此软件是在Android平台上进行设计开发,此软件的开发是通过了客户需求分析阶段以及技术可行性分析阶段,然后进行总体设计阶段和详细设计编码等阶段。此软件不仅具有基本的电子书阅读功能,而且还拥有丰富的实用功能设计。经过不断的测试与完善,电子书阅读器功能稳定,并且在真机上对其进行了测试与验证,基本上达到了用户的需求标准。

1、功能分析

1.1项目来源

此次开发的项目是在线小说阅读器,属于自选项目。随着社会的发展,人们的生活节奏也越来越快空闲时间也越来越零碎,人们没有了大段的时间来进行书籍的阅读,所以一款能利用零碎时间进行随时阅读的软件成为了我们的需求。而一款能在人们随身携带的手机上运行的阅读软件成为了大家的选择。以前我们看看杂志,小说都要去图书馆借阅,而且时间有限,很不方便;而在电脑上看杂志,看小说,文档也是很不方便的。以此看来,一个好的手机阅读器软件的开发是相当有必要的。

1.2开发目标

在线小说阅读器的开发目标就是让用户可以把零碎的空余时间有效的利用到书籍的阅读上,而且用户在没有网路的情况下也可以正常的进行书籍的阅读,让用户摆脱书籍的笨重携带不方便等确定,给予阅读者更大的便利性更好的舒适性。此软件是在Android平台上进行设计开发,它的界面丰富简洁但是却不简单,它包含了书架界面、

2

文件查看界面、软件设置界面、书籍阅读界面等界面,它的功能全面。其优越性表现在:自动扫描手机里的所有书籍、手动从文件夹中选择添加书籍、自动为书籍生成章节目录、添加查看书签、全文关键词搜索、阅读主题选择、阅读字体大小设置等功能。此外,给用户更清晰方便的界面,也是本软件的出发点之一。

2、功能设计

2.1系统功能设计

根据需要,在线图书阅读器主要实现即时的在线阅读,主要包含以下功能:

(1)在线即时搜索图书:可以按照书名、作者进行搜索所要阅读的书籍。

(2)在线即时阅读图书:在线进行电子图书的全屏阅读。

(3)书签功能:可以定制书签,以方便下次阅读。

(4)预读功能:可以预读下一页的内容,减少用户等待的时间。

(5)选章阅读功能:可以根据用户需要,有选择的进行阅读。

2.2软件的总体架构

在线小说阅读器采用PHP+Android+Sphinx的架构模式(如图1所示)。用PHP做服务端,提供与阅读相关的一系列接口。Android做客户端,与服务器端通信,完成用户的相关操作。客户端与服务器端以 SOAP作为基础通讯协议。Sphinx作为搜索图书的引擎,提供强大的分词、查询等服务。

在线图书阅读器的系统架构:

3

4

在线小说阅读器软件主要分为8个功能大模块如图3所示,分别是欢迎模块、软件主界面、书籍管理、阅读管理、文件浏览、系统管理、使用帮助、关于。其中书籍模块中还要文件扫描模块,阅读管理中有章节管理、书签管理、搜索管理。系统设置中有密码设置。其各个模块的详细设计如下:

1.软件欢迎模块。该模块主要实现的功能是,通过Handler来实现一个2秒的缓冲界面,然后通过SharedPreferences读取配置文件,判断是否有密码。如果有密码则跳转至密码验证界面;如果没有密码则判断是否为第一次使用此软件,如果是第一次使用则跳转至引导页面。

2.软件主界面模块。该模块是一个通过TabHost标签组件来实现的一个分类管理功能。本界面的标签在屏幕的最下方,分别是:文件管理、我的书架、我的设置。点击不同的标签则显示不同的界面,默认显示标签为“我的书架”,打开选项中会出现对应的视图。实现了将本程序关联成手机默认打开程序中,即从外部打开文本文件时选择查看方式中会出现本软件图标供用户选择以本软件打开。

3.书籍管理。该模块是以书架的模式来展现书籍,并可以对书籍进行一些操作,本模块共有3个书架分别为:“最近阅读”、“历史阅读”、“收藏阅读”,默认显示是“最近阅读”书架。本模块有导航按钮和书籍选择按钮。当弹出导航栏时,则把书籍从每行显示三本书籍调整到每行显示两本书籍。导航栏中与三大项:分类排序、添加书籍、清空书籍。每项里面又有子菜单。当点击导航里的按钮时会显示子功能导航,当再点击其它按钮时,会收起前面的子功能导航,展开当前的子功能。当单击书籍选择按钮时会弹出书籍选择窗口,选择里面的书架则进入相应的书架界面,同时还可以通过左右滑动来切换书架界面。当单击书籍时会打开相应的书籍阅读界面,长按某书籍时会弹出书籍操作窗口。

4.文件浏览。该模块使用ListView组件显示文件目录,不同的文件类型显示不同的图标。最上面标题栏有导航按钮,当点击导航按钮时会从左侧弹出导航栏,导航栏中有标记文件按钮、分类排序按钮和添加到书架按钮,点击标记文件按钮或长按某文件或目录时则切换到多选模式,其中有多选按钮、反选按钮和取

消按钮;点击分类排序则弹出子菜单,其中有按名称排序、按大小排序、按时间排序和按类型排序;点击添加到书架时如果为选择文件则自动进入多选模式让用户进行文件选择,如果用户未选择则提示“请选择书籍”,进行选择是用户可选择文件或目录,系统会自动进行扫描,把符合要求的文件添加到“最近书架”中,并弹出提示信息,其中有失败个数、已存在个数和成功个数。在多选模式下点击返回按钮或点击标记文件会取消多选模式。非多选模式下,用户点击文件时本软件会根据文件扩展名来判断打开文件方式,如果是文本文件则直接用本软件打开,并把其添加到“最近书架”中,其它格式则调用对应的软件打开,如果是未识别的类型则提示“没有打开此文件的应用”。

5.阅读管理。该模块通过自定义一个View视图来显示书页,通过自定义类来读取文本内容并通过onDraw()方法把文件名、文本内容、电量信息、时间信息和已读百分比进行绘制成图片,并通过View来把绘制的图片显示出来。第一次进入阅读页面是会有显示引导页面来指导用户如何读本页面进行操作。本页面操作包括点击事件和滑动事件,点击左侧屏幕进行向上翻页,点击右侧屏幕进行向下翻页,点击屏幕中间画出菜单选项。此菜单是使用PopupWindow组件实现,菜单分上下两部分,上面的菜单有返回按钮、屏幕亮度调节按钮和添加书签按钮;下面的菜单有主题选择按钮、搜索按钮、书签按钮、目录按钮、字体大小调节按钮、翻页方式按钮、夜间模式切换按钮和退出软件按钮。

6.系统设置。系统设置模块包括阅读设置和系统设置。阅读设置中有连续阅读模式、阅读完成时自动归类、阅读休息提醒和阅读空闲退出。连续阅读模式:下次启动直接进入上次阅读的界面进行继续阅读;阅读完成时自动归类:当书籍阅读到最后一页后对此书籍自动移至“历史阅读”书架中;阅读休息提醒:设置一个时间,当用户在阅读页面停留至这个时间时会弹出个提示框来提醒用户进行休息;阅读空闲退出:设置一个时间,当用户停留在阅读界面并且为对其未进行任何操作至这个时间时,系统会自动关闭本软件。系统设置中有显示隐藏文件、使用软件密码、退出确认、使用帮助和关于。显示隐藏文件:当用户选择此设置后会在下次启动本软件时在文件浏览中显示隐藏文件;使用软件密码:用户可以对此软件进行密码设置;退出时确认:当选择此设置后,退出软件时会显示一个确认框进行退出确认,未选择此设置时则会直接退出本软件;使用帮助:显示本软件的帮助信息;关于:显示关于本软件的信息。本软件的设置信息全部使用SharedPreferences存储。

7.使用帮助。该模块通过读取帮助文件在TextView中显示,并且为TextView 添加滚动条。文件中含有本软件的特点、功能介绍、操作说明等。

5

3、功能实现

一、客户端

1、HomeActivity.java代码:

package activity;

import interfaces.IPushData;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import network.ClientSocket;

import adapter.ListAdapter;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.util.Log;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ListView;

import com.example.wysocket.R;

public class HomeActivity extends Activity implements IPushData{ List directorys =new ArrayList();

ListView mListView;

ListAdapter adapter;

private Handler mhandler = new Handler()

6

{

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

switch (msg.what) {

case 1:

adapter.notifyDataSetChanged();

break;

default:

break;

}

}

};

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(https://www.360docs.net/doc/9927909.html,yout.home_activity);

initView();

requestServer();

}

private void initView()

{

mListView=(ListView) findViewById(R.id.list_home);

adapter =new ListAdapter(directorys, this);

mListView.setAdapter(adapter);

mListView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view,

int position, long id) {

String bookName=directorys.get(position);

7

Intent intent =new

Intent(HomeActivity.this,ReaderActivity.class);

intent.putExtra("bookName", bookName);

startActivity(intent);

}

});

}

/**

* 请求服务器获取目录

*/

private void requestServer()

{

ClientSocket client =new ClientSocket("getDiretory",this);

client.start();

}

@Override

public void onError(Object object) {

// TODO Auto-generated method stub

Log.d("HomeActivity", "链接服务器失败");

}

@Override

public void onSuccess(Object object) {

// TODO Auto-generated method stub

String data=(String) object;

List temp =splitString(data);

if(temp!=null)

{

directorys.clear();

for(int i=0;i

{

directorys.add(temp.get(i));

}

}

mhandler.sendEmptyMessage(1);

}

8

/**

* 将目录内容分离成适配器所需要的数据源

* @param data 服务器返回的字符串

* @return 适配器所需要的数据源

*/

private List splitString(String data)

{

return Arrays.asList(data.split(";"));

}

}

2、ReaderActivity.java代码:

package activity;

import com.example.wysocket.R;

import interfaces.IPushData;

import network.ClientSocket;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.widget.TextView;

public class ReaderActivity extends Activity implements IPushData{ String bookName;

String custormString ="_wy";//用于服务器对请求参数的判断

String bufString ;//缓存的字符串

private Handler mhandler = new Handler()

{

@Override

public void handleMessage(Message msg) {

9

super.handleMessage(msg);

switch (msg.what) {

case 1:

tvContent.setText(bufString);

break;

default:

break;

}

}

};

private TextView tvContent;

@Override

protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(https://www.360docs.net/doc/9927909.html,yout.reader_activity);

bookName=getIntent().getStringExtra("bookName");

bookName=bookName+custormString;

initView();

reqeustServer();

}

private void initView() {

// TODO Auto-generated method stub

tvContent=(TextView) findViewById(https://www.360docs.net/doc/9927909.html,_content);

}

private void reqeustServer()

{

ClientSocket socket =new ClientSocket(bookName, this);

socket.start();

}

/**

* 这里获取得到bufString为8k,在服务端自定义返回字节的大小, * 根据自己的分页思路来做吧。

*/

@Override

10

public void onSuccess(Object object) {

// TODO Auto-generated method stub

bufString=(String) object;

mhandler.sendEmptyMessage(1);

}

/**

*

*/

@Override

public void onError(Object object) {

// TODO Auto-generated method stub

}

}

3、IPushData.java代码:

package interfaces;

/**

* 回调接口。

* @author Wy。

*

*/

public interface IPushData {

void onSuccess(Object object);

void onError(Object object);

}

4、ClientSocket.java代码:

package network;

import interfaces.IPushData;

import java.io.IOException;

import https://www.360docs.net/doc/9927909.html,.Socket;

11

import https://www.360docs.net/doc/9927909.html,.UnknownHostException;

import android.R.integer;

import util.FileUtils;

/**

* 连接服务器的Socket,只是简单的根据不同的请求参数,获取不同的

String。

* @author Wy。

*

*/

public class ClientSocket extends Thread {

Socket socket;

final static String IP="192.168.31.29"; //本机IP地址,使用模拟

器就用10.0.2.2。

final static int port =56565; //服务器的端口。

FileUtils fileUtils; //操作Socket流。

String requestParam; //请求参数。

IPushData iPushData; //回调接口。

public ClientSocket(String requestParams,IPushData i) {

this.requestParam=requestParams;

iPushData=i;

fileUtils=new FileUtils();

}

@Override

public void run() {

try {

Socket socket =new Socket(IP,port);

//先添加请求参数。

12

fileUtils.outPut(socket, requestParam);

//获取服务器返回的字符串。

String dataString=fileUtils.Input(socket);

//关闭Socket的流。

fileUtils.closeSocket();

//回调。

iPushData.onSuccess(dataString);

} catch (UnknownHostException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

5、FileUtils.java代码:

package util;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import https://www.360docs.net/doc/9927909.html,.Socket;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

/**

* 封装操纵Socket的输入输出流。

* @author Wy。

*

*/

public class FileUtils {

OutputStream outputStream=null;

13

BufferedOutputStream bufferedOutputStream=null;

InputStream InputStream=null;

BufferedInputStream bufferedInputStream=null;

/**

* 链接的Socket,要发送的内容。

* @param socket

* @param content

*/

public void outPut(Socket socket,String content)

{

try {

outputStream = socket.getOutputStream();

bufferedOutputStream=new

BufferedOutputStream(outputStream);

byte[] temp =content.getBytes("GB2312");

System.out.println(content);

bufferedOutputStream.write(temp);

bufferedOutputStream.flush();//记得刷新,不然写不了内容的。

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println(e.getMessage());

}

}

/**

* 当客户端读写完毕的时候,调用关闭流。

*/

public void closeSocket()

{

try {

if(InputStream!=null)

{

InputStream.close();

}

if(bufferedInputStream!=null)

{

14

bufferedInputStream.close();

}

if(outputStream!=null)

{

outputStream.close();

}

if(bufferedOutputStream!=null)

{

bufferedOutputStream.close();

}

} catch (Exception e2) {

System.out.println(e2.getMessage());

}

}

/**

* 获取该Socket链接对象,发送过来的内容。

* @param socket

* @return

*/

public String Input(Socket socket)

{

try {

InputStream = socket.getInputStream();

bufferedInputStream=new

BufferedInputStream(InputStream);

//8k的缓存

byte[] data =new byte[1024*8];

int len=bufferedInputStream.read(data);

String temp=new String(data,0,len,"GB2312");

return temp;

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println(e.getMessage());

return "读取错误";

}

15

}

}

二、服务器端

1、CutContentThread.java代码:

package servers;

import java.io.File;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import https://www.360docs.net/doc/9927909.html,.Socket;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import util.BufferedRandomAccessFile;

import util.FileUtils;

/**

* 截取文件内容并发送给客户端

* @author Wy

*

*/

public class CutContentThread extends Thread{

Socket socket=null;

String bookPath;

long pos=0;//文件指针

BufferedRandomAccessFile reader;

FileUtils fileUtils ;

public CutContentThread(Socket socket,String bookPath,long pos) { this.socket=socket;

this.bookPath=bookPath;

this.pos=pos;

16

fileUtils=new FileUtils();

File file =new File(bookPath);

try {

reader =new BufferedRandomAccessFile(file,"r");

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println(e.getMessage());

}

}

@Override

public void run() {

String content=sendChapter();

fileUtils.outPut(socket, content);

}

private String sendChapter()

{

long currentIndex =pos;

//文件指针,操纵文件指针来读取文件

try {

reader.seek(currentIndex);

//一次读8k,根据分页思路自定义大小

byte[] buf = new byte[1024*8];

int len = 0;

len = reader.read(buf,0,buf.length) ;

String contentString=new String(buf, 0, len,"gbk");

System.out.println(contentString);

return contentString;

} catch (IOException e) {

// TODO Auto-generated catch block

System.out.println(e.getMessage());

return "";

}

17

}

}

2、DirectoryThread.java代码:

package servers;

import java.io.File;

import java.io.IOException;

import java.io.UnsupportedEncodingException;

import https://www.360docs.net/doc/9927909.html,.Socket;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import util.FileUtils;

/**

* 发送目录的线程

*

* @author Wy

*

*/

public class DirectoryThread extends Thread {

FileUtils fileUtils = null;

Socket socket = null;

String directory; // 文件目录

public DirectoryThread(Socket socket, String directoryPath) { this.socket = socket;

fileUtils = new FileUtils();

directory = directoryPath;

}

/**

* 获取文件名

*/

@Override

18

public void run() {

String data=getFileName(".txt");

fileUtils.outPut(socket, data);

}

/**

* 获取文件目录下的文件名

*

* @param filePath

* @return

*/

private List getDiretory(String filePath) {

List files = new ArrayList<>();

File file = new File(filePath);

if (file.isDirectory()) {

files = Arrays.asList(file.list());

}

return files;

}

/**

* 获取不带后缀的文件,只匹配相应的后缀名

* @param houzhui 后缀名,如".txt";

* @return 字符串 "西游记;红楼梦;"

*/

private String getFileName(String houzhui) {

List files = new ArrayList<>();

files = getDiretory(directory);

StringBuffer stringBuffer = new StringBuffer();

for (String s : files) {

String temp = s.substring(s.length() - 4, s.length());

if (temp.equals(houzhui)) {

stringBuffer.append((s.substring(0, s.length() - 4)) + ";");

}

19

}

String temp = stringBuffer.toString();

return temp;

}

}

3、ConnectServer.java代码:

package socketserver;

import java.io.IOException;

import https://www.360docs.net/doc/9927909.html,.ServerSocket;

import https://www.360docs.net/doc/9927909.html,.Socket;

import https://www.360docs.net/doc/9927909.html,.SocketException;

import java.util.ArrayList;

import servers.CutContentThread;

import servers.DirectoryThread;

import util.FileUtils;

public class ConnectServer extends Thread{

static final String reader="_wy";

static long pos=0;//文件指针

// public FileUtils fileUtils=null;

//

// ServerSocket serverSocket=null;

//

public ConnectServer() {

}

public static void main(String[] args) throws IOException { System.out.println(".....服务器已经启动...正在监听客户端信息");

ServerSocket serverSocket =new ServerSocket(56565);

20

android开发计算器设计开发报告

《安卓开发》程序设计报告 题目简单计算器开发 专业(班级)网工111班 姓名张波波 学号5(qq) 指导教师赵(老师) 日期 目录 一、设计说明:2 1.设计内容:Android简单应用程序开发,简单计算器。2 2程序说明:2 二、开发环境:3 三、概要设计:3 系统的总体3 四、程序流程和系统功能设计3 程序流程设计3 .系统功能设计4 基于Android平台系统具体设计4 总体模块详细设计5 输入模块详细设计 5

显示模块详细设计6 计算模块详细设计 6 五、计算器系统实现7 Android应用程序构成7 六、截图说明 8 1、图标8 2界面8 3运算界面9 4错误输入9 5设计平台界面10 6签名导出apk 10 七、总结 11 课程设计任务书 一、设计说明: 1.设计内容:Android简单应用程序开发,简单计算器。 2程序说明: 1、计算器界面友好,方便使用。 2、具有基本的加、减、乘、除功能,还有+—、开方、平方功能。能够判断用户输入运算数是否正确。4、 支持小数运算。 具有退格功能,能够删除最后一个输入,ce。 具有清除功能,删除所有,c。 具有结果存储功能,能够显示存储器状态,支持触屏手机。 支持最低版本,最高版本。开发时为

二、开发环境: 开发环境:本系统是采用Eclipse+EclipseMe+JDK+ADT作为开发平台。事实上为了节约时间就直接用Google公司安给的直接绑定好的adt-bundle-windows-x86_64开发,只需要配置下环境变量,无需要关联等操作。 三、概要设计: 系统的总体 整个程序基于android技术开发,出总体模块外主要分为输入模块、显示模块以及计算模块(包括一些其她功能)这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算以及一些其她的功能。 总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及响应触屏的按键,需要监听手机按键动作以及用指针事件处理方法处理触屏的单击动作(以松开按键为准)。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结果,同时还负责显示一些其她的信息。 计算模块则主要描述了计算器的整体,实现了计算器的界面,负责计算用户输入数据,包括加、减、乘、除、等各种计算功能,记忆数据的相关功能,退格以及清零的功能。 四、程序流程和系统功能设计 程序流程设计 知道了系统的功能以后,我们通过来建立显示界面,完成后系统开始监听用户的按键输入,每次输入系统都会判断一次用户输入的类型,是数字还是运算符号或者是清除,判断完后分成不同类型如数字,符号,基本运算等等进行进一步的处理,根据用户的要求继续进行下一步的操作,最后计算出最终结果并显示在显示区。 系统流程图如图4-1所示:

android开发计算器设计开发报告

Xx大学计算机与电子 信息学院《移动编程 技术》安卓程序开发 设计报告---简单计算 器 《安卓开发》程序设计报告 题目简单计算器开发 专业(班级) 网工111班 姓名张波波 学号952937885(qq) 指导教师赵(老师) 日期2014.5.7

目录 一、设计说明: (3) 1.设计内容:Android简单应用程序开发,简单计算器。 (3) 2程序说明: (3) 二、开发环境: (3) 三、概要设计: (3) 3.1 系统的总体 (3) 四、程序流程和系统功能设计 (4) 4.1程序流程设计 (4) 4.2.系统功能设计 (5) 4.3基于Android平台系统具体设计 (6) 4.3.1 总体模块详细设计 (6) 4.3.2 输入模块详细设计 (6) 4.3.3 显示模块详细设计 (7) 4.3.4 计算模块详细设计 (7) 五、计算器系统实现 (8) 5.1 Android应用程序构成 (8) 六、截图说明 (9) 1、图标 (9) 2界面 (10) 3运算界面 (11) 4错误输入 (11) 5设计平台界面 (12) 6签名导出apk (12) 七、总结 (13)

课程设计任务书 一、设计说明: 1.设计内容:Android简单应用程序开发,简单计算器。 2程序说明: 1、计算器界面友好,方便使用。 2、具有基本的加、减、乘、除功能,还有+—、开方、平方功能。 3、能够判断用户输入运算数是否正确。 4、 4、支持小数运算。 5、具有退格功能,能够删除最后一个输入,ce。 6、具有清除功能,删除所有,c。 7、具有结果存储功能,能够显示存储器状态,支持触屏手机。 8、支持最低版本2.0,最高版本4.4。开发时为4.2 二、开发环境: 开发环境:本系统是采用Eclipse+EclipseMe+JDK+ADT作为开发平台。事实上为了节约时间就直接用Google公司安给的直接绑定好的adt-bundle-windows-x86_64开发,只需要配置下环境变量,无需要关联等操作。 三、概要设计: 3.1 系统的总体 整个程序基于android技术开发,出总体模块外主要分为输入模块、显示模块以及计算模块(包括一些其她功能)这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最

android开发——简易计算器的设计报告

简易计算机的设计 摘要:Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。Android的功能十分强大,成为当今软件行业的一股新兴力量。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的、应用程序可以轻松的嵌入网络、应用程序可以并行运行。 一、实训目的 1、了解Android系统,学会Android开发环境的搭建。 2、了解E clipse,学会用E clipse和Java 开发一个Android程序。 3、进一步巩固课堂上所学到的知识,深刻把握Java语言的重要概念及其面向对象的特性,能够熟练的应用面向对象的思想和设计方法解决实际问题的能力。 4、巩固所学Java语言基本知识,增进Java语言编辑基本功,掌握JDK、Editplus、Eclipse、JCreator等开发工具的运用,拓宽常用类库的应用。 二、实训任务 1、Activity的相关知识 简单理解Activity 代表一个用户所能看到的屏幕,Activity 主要是处理一个应用的整体性工作。Activity是最基本的Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应。大多数的应用是由多个屏幕显示组成,因而要用到多个Activity。 (1)Activity的相关方法及相关函数:void onCreate(Bundle)首次启动时调用,接受参数:Null or savedInstanceState(保存的以前某些状态信息);void onStart() 说明了将要显示给用户的活动;void onRestart()将处于停止状态的活动重新显示给用户;void onResume()用户可以开始与活动进行交互时

android简单计算器课程设计

摘要 Android是当今最重要的手机开发平台之一,它是建立在Java基础之上的,能够迅速建立手机软件的解决方案。Android的功能十分强大,成为当今软件行业的一股新兴力量。Android基于Linux平台,由操作系统、中间件、用户界面和应用软件组成,具有以下5个特点:开放性、应用程序无界限、应用程序是在平等条件下创建的,应用程序可以轻松的嵌入网络、应用程序可以并行运行。而简单计算器又是手机上必备的小程序,所以此次创新实践很有意义。并且具有很强的使用性。 关键字:Android Java基础计算器

目录 第1章开发工具与环境 (1) 1.1 Android平台 (1) 1.2 Java开发环境 (1) 1.3 Eclipse (1) 1.4 Android程序基础—Android应用程序的构成 (2) 第2章系统分析与设计 (4) 2.1系统的可行性分析 (4) 2.2 系统的需求分析 (4) 2.3 系统的优势 (4) 2.4 系统的流程图 (5) 第3章系统详细设计 (6) 3.1 动作Activity (6) 3.2 布局文件XML (6) 3.3 Activity的详细设计 (7) 3.2 布局文件XML的详细设计 (21) 3.2 系统的运行结果 (24) 结论 (25) 参考文献 (26)

第1章开发工具与环境 1.1 Android平台 1.谷歌与开放手机联盟合作开发了Android, 这个联盟由包括中国移动、摩托罗拉、高通、宏达和T-Mobile在内的30多家技术和无线应用的领军企业组成。 2.Android是一个真正意义上的开放性移动设备综合平台。通过与运营商、设备制造商、开发商和其他有关各方结成深层次的合作伙伴关系,来建立标准化、开放式的移动电话软件平台,在移动产业内形成一个开放式的生态系统,这样应用之间的通用性和互联性将在最大程度上得到保持。 3.所有的Android应用之间是完全平等的。 4.所有的应用都运行在一个核心的引擎上面,这个核心引擎其实就是一个虚拟机,它提供了一系列用于应用和硬件资源间进行通讯的API。撇开这个核心引擎,Android的所有其他的东西都是“应用”。 5.Android打破了应用之间的界限,比如开发人员可以把Web上的数据与本地的联系人,日历,位置信息结合起来,为用户创造全新的用户体验。 1.2 Java开发环境 Java技术包含了一个编程语言及一个平台。Java编程语言具有很多特性,如面向对象、跨平台、分布式、多线程、解释性等等。Java编程语言起源于Sun公司的一个叫“Green”的项目,目的是开发嵌入式家用电器的分布式系统,使电气更加智能化。1996年1月发布了JDK1.1版本,一门新语言自此走向世界。之后,1998年12月发布了1.2版本,2002年2月发布1.4版本,2004年10月发布1.5版本(5.0),2006年12月发布1.6(6.0)版本,这是目前的最新版本。Java1.2版本是一个重要的版本,基于该版本,Sun将Java技术分为J2SE、J2ME、J2EE,其中J2SE为创建和运行Java程序提供了最基本的环境,J2ME与J2EE 建立在J2SE的基础上,J2ME为嵌入式应用(如运行在手机里的Java程序)提供开发与运行环境,J2EE为分布式的企业应用提供开发与运行环境。 1.3 Eclipse

基于安卓的计算器的设计与实现

安卓应用程序设计 ——简易计算器的实现院(系)名称 专业名称 学生姓名 学生学号 课程名称 2016年6月日

1.系统需求分析 Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android 的快速发展,如今已允许开发者使用多种编程语言来开发Android应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。计算器通过算法实行简单的数学计算从而提高了数学计算的效率,实现计算器的界面优化,使界面更加友好,操作更加方便。基于android的计算器的设计,系统具有良好的界面;必要的交互信息;简约美观的效果。使用人员能快捷简单地进行操作,即可单机按钮进行操作,即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间。 2.系统概要设计 2.1计算器功能概要设计 根据需求,符合用户的实际要求,系统应实现以下功能:计算器界面友好,方便使用,,具有基本的加、减、乘、除功能,能够判断用户输入运算数是否正确,支持小数运算,具有清除功能。 图2.1系统功能图 整个程序基于Android技术开发,除总体模块外主要分为输入模块、显示模块以及计算模块这三大部分。在整个系统中总体模块控制系统的生命周期,输入模块部分负责读取用户输入的数据,显示模块部分负责显示用户之前输入的数据以及显示最终的计算结果,计算模块部分负责进行数据的运算以及一些其他的功能。具体的说,总体模块的作用主要是生成应用程序的主类,控制应用程序的生命周期。 输入模块主要描述了计算器键盘以及键盘的监听即主要负责读取用户的键盘输入以及 响应触屏的按键,需要监听手机动作以及用指针事件处理方法处理触屏的单击动作。同时提供了较为直观的键盘图形用户界面。 显示模块描述了计算器的显示区,即该区域用于显示用户输入的数据以及最终的计算结

android简单计算器代码

package hua.xing.demo; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class CalculatordemoActivity extends Activity implements OnClickListener { /** Called when the activity is first created. */ private Button but0 = null; private Button but1 = null; private Button but2 = null; private Button but3 = null; private Button but4 = null; private Button but5 = null; private Button but6 = null; private Button but7 = null; private Button but8 = null; private Button but9 = null; private Button dim = null; private Button add = null; private Button sub = null; private Button mult = null; private Button div = null; private Button equ = null; private EditText etext = null; private double value = 0;

基于Android计算器功能的实现

基于Android计算器功能的实现 摘要 随着移动通信技术和网络技术的迅速发展,手机系统发生了巨大的变化,从进行简单通话功能的非智能手机到现在集上网、聊天、收发邮件、视屏电话会议等各种服务于娱乐为一身的智能手机系统。由Google公司牵头众多实力雄厚的软硬件厂商加盟成立了OMS联盟,并推出的Android平台手机系统。作为时代的新生儿,Android手机操作平台有着得天独厚的优势广阔的发展前景。本文正是基于Android平台开发的计算器。论文主要阐述以面向对象的程序开发语言eclipse为开发工具, 设计并实现基于Android的计算器。论文首先介绍了Android开发平台和环境以及Android 工程的重要部分,其次对计算器系统和程序进行了分析和设计,再次对计算器进行了系统的实现,并对系统进行了严格的验证,最后本文对所做工作进行了总结。 关键词:手机,Android,用户界面,计算器

THE CALCULATOR FUNCTION REALIZATION BASED ON ANDROID ABSTRACT With the development of mobile communication technology and network technology, great changes have taken place on the mobile phone system. The original mobile phone only has the functions of communication and Smartphone has the functions of internet, chat, video conferencing and other services and entertainment. Android mobile phone platform which was developed by Google Company and many equipment manufacturers of hardware and software vendors, as the era of neonatal has a unique advantage and prospects for development. This article is based on the Android platform calculator. The thesis describes object-oriented programming language eclipse development tools, design and implement a calculator based on the Android. The paper first introduces the Android development platform and environment as well as an important part of the Android project, followed by the calculator systems and procedures analysis and design, the realization of the system once again the calculator, and strict verification, Finally, a summary of the work done. Key words: mobile phone, Android, UI, calculator

android简单计算器说课材料

a n d r o i d简单计算器

欢迎大家补充 package com.example.zzz; //此文使用了fragment的模块。 //此文使用了fragment的模块。 //此文使用了fragment的模块。 //此文使用了fragment的模块。 import android.support.v7.app.ActionBarActivity; import android.support.v7.app.ActionBar; import android.support.v4.app.Fragment; import android.os.Bundle; import https://www.360docs.net/doc/9927909.html,youtInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; import android.os.Build; public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(https://www.360docs.net/doc/9927909.html,yout.activity_main); if (savedInstanceState == null) { getSupportFragmentManager().beginTransaction() .add(R.id.container, new PlaceholderFragment()).commit(); } } @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

Android框架上的简单计算器界面设计

为了深入理解和应用Android框架系统的控件以及更加熟练的掌握eclips的开发技巧,所以就决定做一个简单的计算器来了解和介绍一下Android界面设计的基本技巧。界面的样子如下: 这个界面由一个编辑框和很多按钮组成。他的功能跟Windows下的计算其功能差不多,就是实现+-*/等功能。这个还实现了一个菜单的功能。按一下Exit就可以离开这个应用程序了。 Android框架定义了很多布局(Layout)架构。布局就像容器,里面可以装下很多控件。布局里面还可以套用其他的布局。这样就可以实现界面的多样化以及设计的灵活性。在这个界面中,我们应用了一个LinearLayout的布局,它是垂直向下扩展的。在这个LinearLayout中,我们可以应用一个EditText和一个TableLayout 作为他的子控件。在TableLayout布局可以实现以表格的形式来布局空间。而TableRow是用来定义每一行。在TableLayout中,列的宽度是取其中这一列中宽度最大的控件的宽度。这个应用程序正好用到5x5的一个表格,TableLayout将是最好的选择了。 Android界面编程的一个优势是他的布局全部可以用xml文件来描述,实现了即改即现的方式。ADT又在Eclips里面做了一个Outline的插件。当你打开布局xml文件的时候,Outline就会显示布局的所有控件以及他们的结构。双击其中的控件就会打开空间的属性。你就可以直接编辑属性来轻松实现界面的布局。所改的属性也将立刻在xml文件中显示出来。以下是描述这个简单计算器的界面xml文件给大家做个参考:

android:background="#ff808080" >

相关主题
相关文档
最新文档