搜索
您的当前位置:首页正文

学士学位论文—-基于android的输入法的设计与实现

来源:星星旅游


本 科 毕 业 论 文

基于Android的输入法的设计与实现

The Design and Realization of the Input Method Based on

Android

学 院 名 称: 计算机科学与信息工程学院 专 业 班 级:计算机科学与技术12-1(信息技术) 学 生 姓 名: 学 生 学 号: 指导教师姓名: 指导教师职称:

2016 年 5 月

目 录

摘 要 .............................................................................................................................. 错误!未定义书签。 Abstract ............................................................................................................................ 错误!未定义书签。 引 言 ............................................................................................................................................. 1 第1章 概述 ................................................................................................................................... 2

1.1选题背景 ............................................................................................................................ 2 1.2软件设计的概述 ................................................................................................................ 2

1.2.1设计内容 .................................................................................................................. 2 1.2.2 选题目的和意义 ..................................................................................................... 3 1.3 国内外研究状况 ............................................................................................................... 3 1.4 本章小结 ........................................................................................................................... 4 第2章 系统分析 ........................................................................................................................... 5

2.1 开发工具与环境简介 ....................................................................................................... 5

2.1.1 Eclipse工具简介 ..................................................................................................... 5 2.1.2 Android studio工具简介 ......................................................................................... 5 2.1.3 Sqlite数据库介绍 .................................................................................................... 5 2.1.4 Android简介及运行原理 ........................................................................................ 6 2.2输入法消息传递机制 ........................................................................................................ 7 2.3 可行性分析 ....................................................................................................................... 8 2.4系统功能需求分析 ............................................................................................................ 8 2.5 系统性能分析 ................................................................................................................... 9 2.6 本章小结 ........................................................................................................................... 9 第3章 系统设计 ..........................................................................................................................11

3.1输入法生命周期 ...............................................................................................................11 3.2 软件功能结构设计 ......................................................................................................... 12 3.3 软件设计流程 ................................................................................................................. 12 3.4 数据存储设计 ................................................................................................................. 13

I

3.5 本章小结 ......................................................................................................................... 14 第4章 系统实现 ......................................................................................................................... 15

4.1 设置模块的实现 ............................................................................................................. 15 4.2 输入模块 ......................................................................................................................... 17

4.2.1解析软盘 ................................................................................................................ 17 4.2.2字符输入 ................................................................................................................ 19 4.3用户反馈模块 .................................................................................................................. 23 4.4 本章小结 ......................................................................................................................... 25 第5章 系统测试 ......................................................................................................................... 26

5.1 测试内容及软件环境测试 ............................................................................................. 26 5.2 测试结果 ......................................................................................................................... 27 5.3 本章小结 ......................................................................................................................... 27 致 谢 ........................................................................................................................................... 29 参考文献 ....................................................................................................................................... 30

II

基于Android的输入法的设计与实现

摘要:随着科技信息技术的不断进步与发展,电子移动设备越来越普及。其中最受人们推崇的就是智能手机。人们可以通过手机中的短信消息、电话薄、记事本、聊天工具、浏览器等进行通讯聊天、搜索阅览最新资讯等。但手机这些功能的实现都有一个最基本的前提,即支持字符输入。目前市场上手机品牌繁多,主要流行的智能手机操作系统包括:Android、iOS、Symbian、Windows Phone,其中Android用户占大部分。因此实现一个基于Android的、既能快速输入又简单易学的输入法APP有着绝对的市场优势。另外,一款便捷的输入法在提高输入效率的同时也可以推广第三方应用的使用率。

本文针对当前输入法软件的需求,设计一款能够支持中英文切换、标点符号输入、数字输入的输入法APP,在输入时能够生成联想词以便提高输入效率。而且增加了按键的效果,如振动。本设计在实现过程中主要用到了Android四大组件的Service组件、对XML文件解析等。

关键字:输入法;Android;联想词

I

The Design and Realization of the Input Method Based on Android

Abstract: With the continuous development of science and technology progress and information technology, electronic mobile devices becoming increasingly popular. Tow of the most respected people ard smart phones. People can communicate chat,search by reading the latest news and other mobile phone SMS messages,phone book,notepad,chat,browser,etc.But the realization of these features the phone has a basic premise that support character input. Mobile phones currently on the market many brands,mainly popular smartphone operating systems include: Android, ios, Symbian, Windows Phone,which accounts for the majority of Android users.Thus achieving a Android-based, both easy to learn and fast input Input Method APP has an absolute market advantage. In addition, a convenient input method input in improving efficiency but also can promote the usage of third-party applications. In this paper, the current input method software requirements design a switch can support in English punctuation input, input method APP digital inputs,when the input to generate word associations in order to improve the efficiency on input.But also increases the effect of keys,such as vibration. The design process is mainly used in the realization of the four major components of the Android Service components, analytical techniques and other XML documents.

Keywords: Input method; Android; Associational word

II

引 言

随着科学技术的进步与发展,移动终端设备越来越普及,而且它的硬件设备越来越好,应用软件也层出不穷,具有很大的发展空间。目前市场上移动终端设备使用的主流操作系统为Android、iOS、Windows phone,来自Statistic的数据显示,2010年iOS与Android共同的市场份额才仅为38%,但目前两者在移动市场上的份额已经超过了97%,而Windows phone目前的移动市场份额约占2.5%,且呈现下滑趋势。作为移动终端设备的引领者,Android系统以其源码开源的优势正处于蓬勃发展的开拓阶段,可谓是如日中天。 正是因为Android源码开源,开发语言简单,智能手机价格亲民且性能体验优良,用户、程序开发者越来越倾向于Android系统的智能机,而以Android系统开发的应用软件的市场前景也是欣欣向荣。

目前软件市场虽然发展前景光明,但有市场必定存在竞争,而只有竞争才能促进技术的进步,性能体验的不断完善。市场上软件种类繁多,而且它们的功能也都根据用户的体验不断地完善与升级,用户在使用这些软件的时候,不可避免的会触发输入功能,例如微信、陌陌、记事本、电话薄…输入功能是由单独的输入法APP完成的,用户在使用输入法功能时最基本的用户体验就是输入效率,因此如何提高输入法的输入效率在实现输入法APP时尤为重要。本设计就是根据这一需求实现了一款可以中英文切换的输入法APP。在输入时实现了联想词的功能,从而极大提高了输入效率。且在输入法设置中也增加了一些按键效果,如振动、音效,用户反馈功能及联想词对否打开的控制开关。

1

第1章 概述

社会在发展,科技在进步。曾经交通不畅信息闭塞,如今通过互联网络我们足不出户便闻天下事;曾经手机块大如砖,如今小巧精致;曾经手机仅能通话,如今同电脑一样功能丰富;曾经只有英文输入法,如今有多种语言输入。每一种进步都是根据人们的需求不断努力创新、探索的结果。我国作为智能手机用户的大国,如何提高中文输入的速率、优化输入法字符的输入方式已经成为急需解决的问题。

1.1选题背景

科技信息技术在不断的进步与发展,电子移动设备也受到极大的推崇。其中最受人们推崇的就是智能手机。人们可以通过手机中的短信消息、电话薄、记事本、聊天工具、浏览器等进行通讯聊天、搜索阅览最新资讯等。但手机这些功能的实现都有一个最基本的前提,即支持字符输入。最早期的输入法软件仅支持英文字符输入,但随着电子移动设备的推广仅英文输入已经不能满足广大用户的需求。人们已经开始研究如何使输入法支持输入多种语言,甚至各种表情符号。而我国在推动移动终端设备的发展上起到重要作用,实现一款操作便捷、输入效率高、支持中文输入的输入法APP是市场发展的必然需求。

目前,实现中文输入的主要技术来源是依靠国外技术,国内一些公司在研发输入法APP时需要交纳高昂的专利费用。另外,市场上输入法APP种类虽然玲琅满目,例百度输入法、搜狗输入法、讯飞输入法„但用户在操作时仍会觉得操作不便,设置繁琐等问题,因此,根据这些现状开发一款操作便捷、输入效率高的输入法APP尤为重要。

1.2软件设计的概述

1.2.1设计内容

本设计是基于Android的输入法的设计与实现。主要实现一个第三方的输入法apk,将该apk装入Android系统的移动设备,能够通过系统设置将装入的输入法设置为默认输入法,使得用户在进行输入操作时均是通过该输入法实现输入。系统的结构设计主要分为设置模块、输入模块、用户反馈模块。

设置模块的功能:用户可以根据自己的需求通过设置页面对输入法进行输入设置,如控制输入时是否有按键声音、振动;是否开启联想词功能;用户反馈功能。

2

输入模块的功能:用户可以实现中文输入、英文输入的切换,且在输入时会产生联想词,以提高输入效率;可以输入0~9阿拉伯数字及其他标点符号;在英文输入时可以切换大小写等。

用户反馈模块功能:用户可以输入反馈信息向开发者反馈应用的优缺点,以便产品的优化、应用的升级。 1.2.2 选题目的和意义

随着移动通信设备的日益普及,人们越来越多地依赖于这些设备进行信息处理与交流,因此如何快速准确地向移动设备输入文字信息成为当今信息领域研究的热点之一。目前,移动设备使用的输入法主要为:数字键盘输入法、手写输入法以及全键盘输入法。由于移动设备硬件的限制,数字键盘输入法成为手机中最为常用的输入法,而我国汉字输入的主要技术来源于国外,90%以上的手机嵌入的汉字输入法技术使用的是国外的专利与技术,这需要交纳高昂的专利费用。而且,中国汉字呈现多样化,目前很多输入法虽然能实现中文输入,但是有很多汉字不完全,根本无法输入一些生僻字。因此开发一款属于我们自己的输入法不仅可以省去高昂的专利费用而且可以根据我们自己的需求设计出使用便捷舒适的输入法。

另外,我们通常都是用手机自带的输入法,如三星输入法、google输入法,有时我们也会根据自己的喜好下载应用第三方的输入法,如:搜狗输入法、百度输入法、讯飞输入法等。但是我们在使用这些输入法时或多或少会觉得有些不如意,可能认为输入界面设计的不合理给人视觉效果不好,或者找不到我们所需的文字或表情等。而且,未来的发展就是输入法的“语音时代”,输入法更加的智能与迅速,更加符合越来越快的社会节奏。因此设计一款输入法,使其尽可能的便捷,这样不仅加深了对Android输入法框架的理解,还能将各种输入法向移动设备的移植有借鉴意义。

1.3 国内外研究状况

Android曾经是旧金山一家公司的名字,于2005年8月份被Google收购。Android系统由于它的开放性、应用程序无界性、应用程序可以轻松嵌入网络、并行运行等特点,已经成为一个平台、一个生态体系,在移动领域已经得到广泛应用。

在国外,自Google公司宣布Android系统上市以来,在短短的几年内由于开源的优

3

势迅速发展,在市场上有很大的市场占有率。在国外有很多基于Android平台开发的技术已经相当成熟。

在国内,Android自09年进入中国以来,由于其设备价格的亲民性、移动通信设备公司的大力宣传,受到广大消费者的追逐。而广大应用程序的开发者也因为市场的需求、Android源码的开放性、开发工具的免费性陆续转战到基于Android平台的开发。目前国内Android开发主要方向是应用层开发,大致可分为三类:为企业开发应用、开发通用应用及游戏开发。虽然Android源码对外开放,但国内的学习资料并不是很多,大部分学习资料都是翻译过来的,并不全面而且可能丢失了原文所表达的含义。而对于英文文档,由于大部分人的英语水平限制,对原文文档理解的不是很透彻,这些都为Android技术在国内的发展带来了不便。

1.4 本章小结

本章主要介绍了选题背景、设计内容及其意义、国内外研究状况,充分说明输入法APP实现的重要性。

4

第2章 系统分析

需求分析在程序开发过程中具有举足轻重的地位。程序在开发过程中它的功能就是根据需求而来的,如果一个系统在开发前没有进行需求分析,那么投入的人力、物力、财力都是徒劳的。因为系统在开发前就忽略了用户的需求,最后的结果肯定不能满足用户的要求。因此,需求分析在项目开发中具有决策性、方向性和策略性。

2.1 开发工具与环境简介

开发工具:Eclipse、Android studio;

软件环境:JDK1.7版本,SDK,Sqlite数据库。 2.1.1 Eclipse工具简介

Eclipse是一个开源的、免费的、基于Java的跨平台的集成开发环境(IDE),可以

通过安装不同的插件使其支持不同的计算机语言。

Eclipse的优点如下:

1.源码开放、免费的开发工具;

2.可以通过安装插件支持多种计算机语言,形成一个强大的开发环境; 3.具有可视化开发界面,便于开发人员操作。 2.1.2 Android studio工具简介

Android studio是近年Google公司专门为Android开发者提供的开发工具,它是基于IntelliJ IDEA的Android开发环境,类似于eclipse的ADT插件,基于Gradle的构建支持。它的提示工具更好地对程序性能、可用性、版本兼容和其他问题进行控制捕捉,同时它自带的布局编辑器可以随意拖动UI组件,并支持在多个屏幕配置上预览布局等。 2.1.3 Sqlite数据库介绍

Sqlite是一个轻量级的数据库,它包含在一个比较小的C库中。它是D.Richardhipp建立的公有领域项目。它是在Eclipse内部的数据库,当开发者需要一些不太复杂的数据库的时候,就可以使用Eclipse自带的数据库,不像常见的C/S范例,Sqlite引擎不是一

5

个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在存在于主机上存储的一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。Sqlite数据库的主要特点如下:

1.不需要安装,在使用时直接使用Android的sql语句创建数据库即可; 2.数据保存在单一磁盘文件中,是一个完整的数据库文件; 3.数据库文件可以在不同字节顺序的机器间自由的共享; 4.支持数据库容量大,2TB;

5.占用空间小,大致13万行C代码,4.43M;

6.以I/O流的方式或加载到内存的方式操作文件,数据库操作比较快; 7.可以跨平台操作,且具有较高的移植性。

8.比较好的注释源代码,并且有着很高的测试覆盖率; 9.独立唯一,没有额外依赖;

10.源码完全的开源,你可以随意使用,包括出售它; 11.支持多种开发语言:C,PHP,Java,C#等。 2.1.4 Android简介及运行原理

Android是开放源码操作系统,它是以Linux和Java为基础的,主要适用于移动终端设备,该操作系统最初由Andy Rubin开发,后被Google收购。

Android进行开发主要是对四大组件的应用,其四大组件分别为Activity、Service、BroadcastReceiver、Content Provider。其中,Activity主要是用来展现界面。Service主要运行在后台提供服务。BroadcastReceiver主要接收广播处理信息。Content Provider提供数据,可以使不同应用程序间数据共享。一般情况下基于Android开发的应用程序主要是使用Activity,因为它使应用可视化,便于用户的操作和理解。

Android系统架构由5部分组成,它们是LinuxKernel、Android Runtime、Libraries、Application Framework、Applications,系统结构图如下图2-1所示。

6

图2-1 Android系统结构图

运行原理:当我们创建一个前台应用程序时,实质是实现一个Activity,我们可以通过这个Activity呈现出我们所设计的页面,并根据Activity的生命周期实现相关业务逻辑。而一个后台应用则是没有界面的,其相关的业务逻辑主要在Service中实现。在业务逻辑的实现过程中可能伴随着BroadcastReceiver、Content Provider两大组件的应用。 以Activity为例解释如下:

super.onCreate(savedinstancestate);//是Activity生命周期的第一个方法,用作UI等初始化操作 setContentview(R.layout.activity_main);//加载Activity的布局文件(activity_main.xml)

2.2输入法消息传递机制

输入法框架(IMF)是由客户端、输入法服务(InputMethodManagerService,IMMS)、输入法应用(InputMethodService,IMS)三部分组成。输入法的消息传递机制为IMMS负责管理系统的所有输入法,包括输入法service(IMS)加载及切换。程序获得焦点时,就会通过InputMethodManager向InputMethodManagerService通知自己获得焦点并请求绑定自己到当前的输入法上。InputConnection接口实现了BaseInputConnection和InputConnectiionWrapper接口,主要用于客户端和输入法之间的通信。客户端通过InputConnection将输入码传给输入法后,输入法应用对输入码进行处理,处理完毕后需将得到的字符返回给客户端。另外,客户端不能直接访问输入法程序,只能通过EditText

7

这类输入控件访问InputMethodSession接口。输入法的消息传递机制如下图2-2所示:

图2-2输入法消息传递机制

2.3 可行性分析

本应用从经济可行性和技术可行性两方面来阐述。 1.经济可行性

该应用在开发过程中主要开发工具为PC机一台,Android系统的测试机一台,且投入人力资源少,软件开发成本低,因此在经济上是可行的。

2.技术可行性

技术可行性指在现有技术下能否完成性能目标,在限制条件下能否完成功能目标。本设计在实现过程中采用的技术及语言都已经相当成熟,且在现有条件下没有什么难以克服技术问题,根据当前条件能够实现预定的功能、性能目标,因此在技术上是可行的。

2.4系统功能需求分析

输入法软件主要是针对移动终端设备开发的,主要目的是提高人们的输入速度,从而达到提高效率的目的。本应用最终的性能目标就是易学、高效,能被广大人群接受,其大致的功能需求如下:

1、能够实现中文输入; 2、能够实现英文字符输入; 3、英文输入时可以转换大小写; 4、能够输入各种常用的标点符号;

5、在中文输入时可以产生联想词,以提高输入的速度; 6、可以增加按键效果,即在输入时有按键音效,如声音、振动;

8

7、联想词的产生是可控的,即有开关可以控制是否产生联想词; 8、有用户反馈功能,以便应用的功能完善升级。

采用用例图进行功能分析时就是以角色、用例及它们之间的关系所构成的视图来阐述 功能,从而清晰形象的表达出功能关系。本设计的功能模块大致可以设置模块、输入模块、用户反馈模块,用例图如下图2-3所示。

图2-3用例分析图

由上述需求分析总结出各功能模块的关系为,用户在装入该输入法APP后可以通过终端设备的系统设置找到语言和键盘条目,然后将装入的输入法APP设置为系统默认的输入法,然后在通过该输入法设置对输入法功能做简要设置,例如是否开启按键音效、按键振动、是否开启联想词功能,设置完毕后可以通过任意应用触发输入法功能,触发后在输入时就会根据设置的功能显示按键效果。在输入时中可以输入中英文两种语言,在进行英文输入时可以控制大小写,中文输入时可以产生联想词。另外也可以切换到标点符号视图,进行符号输入。若用户在使用过程中有建议提出,可以通过用户反馈页面将建议反馈给开发者,以便产品的升级。

2.5 系统性能分析

由于本软件是终端设备必不可少的应用,其用户量广大,但其最基本也是最重要的性能就响应时间快,输入效率高,因此其性能指标如下:

所有操作的的平均响应时间<2秒。

2.6 本章小结

本章主要对软件进行了需求分析,通过系统可行性分析、系统性能分析以及功能需求

9

分析,总结出各功能模块的关系,为之后设计在实现前定制计划、分配任务提供参考与目标。

10

第3章 系统设计

软件设计在整个软件开发过程中占据十分重要的地位。好的设计可以使用户在使用过程中有一个好的用户体验,便于产品的推广。从程序员角度来说,一个好的设计可以减少开发的难度和开发周期,在一定程度上也节约了开发成本,为公司带来更大的利益。

3.1输入法生命周期

输入法是用户与应用程序交互的中介,它是作为一个后台服务一直运行在后台,Android框架提供了一个输入法框架,它是可扩展的,允许应用程序向用户提供选择输入方式,例如键盘输入、语音输入等。用户可以在系统设置中选择想要使用的输入法,有且只会有一个输入法服务运行在后台。输入法的生命周期如下图3-1所示:

图3-1输入法生命周期

11

 onCreateInputiew():创建软盘视图;  onCreateCandldateViews():创建候选区;  onStartInput():开始输入字符;

 onCurrentInputMethodSubtypeChanged():当切换输入法语言时会调用该方法;  onFinshInput():输入字符完毕。

3.2 软件功能结构设计

软件的功能结构即软件的功能模块。在本设计中功能模块大致可以分为设置模块、输入模块,其中设置模块又包含输入法功能设置和用户反馈功能。因为输入法必须要做到实时触发实时响应,所以在设计时将其作为一个后台长寿程序一直在后台运行,让其实时监听用户行为,一旦有用户请求输入法功能就立即弹出输入框,响应用户行为。而用户使用输入法时可以进行中英文两种语言的切换、标点符号输入、阿拉伯数字输入满足了用户基本输入的需求。又考虑到应用是为广大用户而设计,应尽可能的满足广大用户的需求,因此增加了用户反馈功能,以便应用的升级。软件总体功能结构框架如下图3-2所示。

图3-2软件功能结构图

3.3 软件设计流程

软件设计流程则是根据软件的功能需求以及用户的操作体验设计出软件实现后的模拟体验流程。该过程十分重要,因为程序开发人员就是根据这一设计体验实现各个功能模

12

块,在软件开发完成后其操作流程应与设计流程一致。另外一个好地设计流程会有很好的用户体验,而且也会给开发人员在实现过程中省去很多不便,可以减少人力与财力的浪费。本设计实现的流程图如下图3-3所示。

图 3-3 设计流程图

3.4 数据存储设计

数据的存储在软件开发中具有很重要的作用,很多软件页面显示的数据、页面跳转的流程均是根据保存的数据而来。数据存储有很多种方式,在Android中数据的存储主要有一下五种方式:数据库存储、文件存储、网络存储、ContentProvider存储、SharedPreference存储。这五种存储方式各具优缺点,其中数据库存储主要运用于数据量大、数据间关系相对复杂且有较多数据操作(增删改查)的应用。SharedPreference存储方式适用于数据格式简单、数据间没有关联、数据量少的应用,一般主要存储应用的标记位、口令密码等。

13

而本应用选择的存储方式就是SharedPreference存储方式,因为本应用主要存储设置中的一些选项标志位,这些标记位的数据格式简单且数据量少,便于存储读取,因此选择SharedPreference存储数据十分便捷。

3.5 本章小结

本章主要根据上一章的系统需求做了详细的设计分析。结合输入法的生命周期大致介绍了输入法的流程。根据设计流程图可以很清晰的看出各功能模块的关联以及软件实现后的效果。而且也根据软件需存储的数据确定了数据存储的方式。为软件的具体开发实现做了充足的准备。

14

第4章 系统实现

用户在进行输入请求时,终端设备会根据设置的默认输入法进程弹出相应的输入法软盘,用户可以操作软盘实现目标字符的输入。本应用实现的语言输入为中文、英文两种语言,因此用户可以操作软盘实现语言的切换,也可以切换到符号视图界面输入相关标点符号。在进行英文输入时可以实现大小写的输入,中文输入时为提高输入效率加入了联想词功能。用户也可以通过设置功能对输入操作做一些设置,例如,操作软盘时是否开启按键效果、是否开启联想词功能。此外,用户也可以像软件发布方提供一些建设性意见,以便产品的优化。

4.1 设置模块的实现

应用在实现过程中一般为了使应用更加人性化以及增加用户的体验特意增加了设置功能,以方便用户根据自己的喜好设置应用,这样做的目的是站在用户的角度开发应用,使其更加人性化。本设计在实现的过程中也遵循这个原则,增加了设置功能,以便用户在进行输入操作时可以根据自己的喜好设置不同的输入效果。应用设置界面如下图4-1所示。

图4-1应用设置界面

当用户通过系统设置找到当前输入法时,可以点击设置条目进入该页面,进行输入法的设置。按键声音选项控制是否开启按键声音,即在操作软盘时是否有音效。同理,按键振动选项是控制在操作软盘时是否有振动效果。联想输入主要是用于中文输入时是否有联想词的功能,若开启则可以提高输入效率。

15

设置布局的实现主要是利用PreferenceScreen作为根元素并嵌套其他标签实现的具有偏好类别的设置界面。实现的核心代码如下:

android:key=\"@string/setting_sound_key\" android:title=\"@string/setting_sound_key_title\" android:persistent=\"true\"

android:summaryOn=\"@string/setting_enabled\" android:summaryOff=\"@string/setting_disabled\"/> android:key=\"@string/setting_vibrate_key\" android:title=\"@string/setting_vibrate_title\" android:persistent=\"false\"

android:summaryOn=\"@string/setting_enabled\" android:summaryOff=\"@string/setting_disabled\"/> android:key=\"@string/setting_prediction_key\" android:title=\"@string/setting_prediction_title\" android:persistent=\"true\"

android:summaryOn=\"@string/setting_enabled\" android:summaryOff=\"@string/setting_disabled\"/>

android:title=\"@string/setting_user\" android:key=\"@string/setting_user_key\">

以上代码主要是通过xml文件填充了设置页面的布局,android:title属性主要是设置条目名称,设置完成后最后显示结果“用户反馈”,android:key属性相当于Android布局

16

文件中设置控件的id,是控件的唯一标识。CheckBoxPreference是带有单选框的控件,相当于CheckBox控件。设置界面的布局采用以上方式,而非Android传统的布局定义,可以减少代码量,且使用的控件清晰易懂。

4.2 输入模块

在没有智能手机前,人们进行输入时都是通过物理键盘实现的,由于硬件的限制键盘样式基本一致,但是现在输入法键盘都是通过代码实现的,所以它的样式可以根据自己的喜好设计,也可以加入多种皮肤让其变得更加美观。当前用的比较多的样式就是九宫格样式或者一直熟悉的笔记本键盘的样式。而本应用软盘的设计就是采用笔记本键盘的样式。简单、易用。 4.2.1解析软盘

输入模块实现的主要功能是实现字符的输入。当用户触发输入法功能时,首先会解析输入法软盘布局文件绘制输入法软盘。当软盘形成后,用户可以操作软盘实现字符的输入。加载解析XML文件后最后绘制软盘如下图4-2所示。

图4-2输入法软盘

绘制软盘主要是采用解析xml文件获取相关code,然后根据获取的内容绘制软盘,解析xml文件如下:

while (mXmlEventType != XmlResourceParser.END_DOCUMENT) { mNextEventFetched = false;

17

if (mXmlEventType == XmlResourceParser.START_TAG) { String attribute = xrp.getName();

if (XMLTAG_SKB_TEMPLATE.compareTo(attribute) == 0) { Drawable skbBg = getDrawable(xrp, XMLATTR_SKB_BG, null); Drawable balloonBg = getDrawable(xrp, XMLATTR_BALLOON_BG, null);

mSkbTemplate.setBackgrounds(skbBg, balloonBg, popupBg); float xMargin = getFloat(xrp, XMLATTR_KEY_XMARGIN, 0); float yMargin = getFloat(xrp, XMLATTR_KEY_YMARGIN, 0); mSkbTemplate.setMargins(xMargin, yMargin); globalColor = getColor(xrp, XMLATTR_COLOR, 0); } else if (XMLTAG_KEYTYPE.compareTo(attribute) == 0) { int id = getInteger(xrp, XMLATTR_ID, KEYTYPE_ID_LAST); Drawable bg = getDrawable(xrp, XMLATTR_KEYTYPE_BG, null); Drawable hlBg = getDrawable(xrp, XMLATTR_KEYTYPE_HLBG, null);

int color = getColor(xrp, XMLATTR_COLOR, globalColor); int colorHl = getColor(xrp, XMLATTR_COLOR_HIGHLIGHT, globalColorHl);

if (id != lastKeyTypeId + 1) return null;

SoftKeyType keyType = mSkbTemplate.createKeyType(id, bg, hlBg);

keyType.setColors(color, colorHl, colorBalloon);

以上代码主要是对键盘布局xml文件的解析,while循环语句的判断主要是判断是否解析到文件的底部,若没有则说明文件还未解析完需要继续解析。在解析过程中通过节点解析输入法键盘的背景图片、按键效果、构成键盘的每一个key、每一个key间的外边距以及key与key间的相对距离。最后将解析到的结果通过set方法设置为键盘属性,最后绘制为输入法软盘。通过getDrawable(xrp, XMLATTR_SKB_BG, null)方法,获取软盘的背景图片,如果没有则设置为null,在绘制时会采用默认的软盘背景。然后将取得的xMargin、yMargin设置为每一个key的外边距,这样就使得每一个key之间都有一定的间距,使键盘界面看起

18

来美观简洁。因为输入法键盘分为中文输入键盘、英文输入键盘、中文符号键盘、英文符号键盘四个种类,所以在解析键盘时也需要对其进行标记,mSkbTemplate.createKeyType(id, bg, hlBg)就是设置输入法键盘的种类,为之后的键盘的切换做标记。 4.2.2字符输入

当输入法软盘弹出后,用户可以操作输入法软盘实现字符的输入。用户在进行英文输入时没有联想词功能,但可以实现大小写的切换。而在输入中文时具有联想词功能。联想词功能的实现主要是为了提高输入速率,以适应当前越来越快的生活节奏及最求高效率的需求。且在当前软盘下可以进行中文、英文、符号软盘的切换,操作便捷简单。

中文输入时产生联想词,效果如下图4-3所示。

图4-3中文输入效果图

当按图4-3所示的‘中文’按钮时,软盘会切换到英文输入的键盘。在该键盘下可以输入英文字符,若想切换到大写输入只需点击软盘中的‘ALT’按键,便可实现大写字母的输入。当点击‘?123’按键时便切换到标点符号的视图,标点符号可以分为两大类,即中文模式下的标点符号、英文模式下的标点符号,在任意一种符号键盘下用户都可以选择输入各种常用的标点符号,同时,在该界面也可以输入0~9阿拉伯数字。效果如下图4-4所示。

19

图4-4其他字符输入

在实现字符输入过程中主要是对event事件进行处理,相关处理如下:

public void responseSoftKeyEvent(SoftKey softkey) { if (null == softkey) return;

InputConnection ic = getCurrentInputConnection(); if (ic == null) return;

int keyCode = softkey.getKeyCode(); if (softkey.isKeyCodeKey()) {

if (processFunctionKeys(keyCode, true)) return; }

if (!kUsed) {

if (ImeState.STATE_INPUT == mImeState) { commitResultText(mDecInfo

.getCurrentFullSent(mCandidatesContainer .getActiveCandiatePos())); } else if (ImeState.STATE_COMPOSING == mImeState) { commitResultText(mDecInfo.getComposingStr()); }

commitResultText(keyLabel);

20

resetToIdleState(false); } }

if (!mSkbContainer.isCurrentSkbSticky()) {

updateIcon(mInputModeSwitcher.requestBackToPreviousSkb()); resetToIdleState(false);

mSkbContainer.updateInputMode(); }

}

以上代码对输入事件进行判断,SoftKey是虚拟按键,代表输入法软盘的虚拟按键,当SoftKey为null的时候直接返回不做任何处理,否则就要获取当前程序与其绑定的输入法的通信连接,主要通过调用getCurrentInputConnection()方法获取,这是Android系统提供的方法。若当前应用程序与输入法成功建立了通信连接,就会响应按键事件。虽然输入法软盘上都是我们能够看得懂的字母、数字、标点等,但我们的硬件设备并不能识别,所以硬件设备是通过Code码来识别我们的输入,所以当我们在软盘上点击任何一个按键时都会调用getKeyCode()方法,获取当前按键的Code码,其实就是一些整形数字,然后在通过一系列转化,成为机器能识别的二进制数据,最后经过一系列处理返回人们能识别的数据。

private void initPinyinkeyboardEngine() { byte usr_dict[];

usr_dict = new byte[MAX_LENGTH];

AssetFileDescriptor afd = getResources().openRawResourceFd( R.raw.dict_pinyin); if (getUsrDictFileName(usr_dict)) {

inited = nativeImOpenDecoderFd(afd.getFileDescriptor(), afd .getStartOffset(), afd.getLength(), usr_dict); } try {

afd.close();

21

} catch (IOException e) { } }

以上代码主要是用在中文输入,在中文解析的服务中由PinyinDecoderService实现。因为Android操作系统是由国外开发的,所以在实现输入法模块功能时只是实现了英文输入,而中文输入是为了适应国内广大用户开发的。目前硬件设备只会识别机器语言,所以在进行中文输入开发时需要将我们输入的Code码转换成机器语言,然后在到词库中进行查找中文词,通过getResources().openRawResourceFd(R.raw.dict_pinyin)读取词库资源文件,词库即词典,在进行输入法开发时都会包含一个词库,本词库中包含所有常用的中文词汇。nativeImOpenDecoderFd(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength(), usr_dict)方法通过底层交互打开中文解析文件。该方法是在java中声明的一个上层方法,具体实现是用C语言实现的,以便于底层的交互。

以下就是上层应用与底层交互时用到的C语言编写的代码,

JNIEXPORT jboolean JNICALL nativeImOpenDecoderFd(JNIEnv* env, jclass jclazz, jobject fd_sys_dict, jlong startoffset,

jlong length, jbyteArray fn_usr_dict) {

jint fd = env->GetIntField(fd_sys_dict, gFileDescriptorOffsets.mDescriptor); jbyte *fud = (*env).GetByteArrayElements(fn_usr_dict, 0); jboolean jret = JNI_FALSE; int newfd = dup(fd);

if (im_open_decoder_fd(newfd, startoffset, length, (const char*)fud)) jret = JNI_TRUE; close(newfd);

(*env).ReleaseByteArrayElements(fn_usr_dict, fud, 0); return jret; }

该部分代码的实现主要是上层应用需要调用底层函数库,来打开词库文件。因为Android系统是基于linux系统实现的,所以底层都是用C语言或C++语言实现的,在与底层交互时需要用到jni技术来实现。

22

4.3用户反馈模块

一款应用如果想长期活跃在市场,被广大用户接受,那么它必须要有新意、适用于人们的生活。而一款应用在开发前都是经过市场调研的,然后才会确定功能进行开发。虽然开发前都是基于用户的角度设计功能和用户体验,但社会在进步人们的需求也会不断地变化,而且市场调研往往代表部分用户群体的心声,虽然基本符合广大用户的要求,但仍会有缺漏。那么就需要有一种方式能让每个用户都有机会反馈他们的建议。用户反馈功能的加入就很好的解决了这一问题,这个功能是集成在APP中的,只要用户使用该APP就都有机会进行意见反馈。即节约了成本也可以收集广大用户的意见完善应用,使其功能更加的全面。

在本应用中,当用户点击“用户反馈”模块时就会进入反馈界面,在反馈页面提供了几种选项可供用户选择,如UI设计不美观、汉语词汇量太少等。用户反馈界面如下图4-5所示。

图4-5用户反馈界面

用户反馈界面主的实现主要是用GridView控件实现,它是一种空格布局控件,能根据属性设置几行几列实现格子效果。当用户进入用户反馈界面时会看到一个动画效果,“请选择您的反馈:”是从底部向上平移的动画,四个反馈选项是一个顺时针的3D跳动动画。当点击‘回到设置’按钮时就会关闭该页面,跳转到设置页面。

实现3D效果的动画主要是对Android中旋转动画进行处理,具体实现如下:

private void init3DAnimation() {

23

}

final int cardWidth = mGridview.getChildAt(0).getWidth(); final int cardHeight = mGridview.getChildAt(0).getHeight();

mRotateAnimations_3D[0] = new mRotateAnimations_3D (-90, 0, cardWidth / 2,

0, 0, true, 0);

mRotateAnimations_3D [1] = new mRotateAnimations_3D (90, 0, 0,

cardHeight / 2, 0, true, 1);

mRotateAnimations_3D [2] = new mRotateAnimations_3D (-90, 0, cardWidth,

cardHeight / 2, 0, true, 1);

mRotateAnimations_3D [3] = new mRotateAnimations_3D (-90, 0, cardWidth / 2,

0, 0, true, 0);

for (int i = 0; i < mRotateAnimations_3D.length; i++) {

mRotateAnimations_3D [i].setDuration(ANIMATION_TIME - i * DELAY_TIME); mRotateAnimations_3D [i].setFillBefore(true); mRotateAnimations_3D [i].setFillAfter(true);

mRotateAnimations_3D [i].setInterpolator(new BounceInterpolator()); final int m = i;

mRotateAnimations_3D [i]

.setAnimationListener(new AnimationListener() {

@Override

public void onAnimationStart(Animation animation) {

ViewHolder holder = getViewHolder(m); if (holder != null) { }

holder.showViews();

}

以上代码就是通过设置四组旋转动画,每一组旋转动画的旋转角度不同,从而产生不同动画效果,其中每一组动画对应一个反馈选项,通过控制反馈选项的执行动画顺序,以达到顺时针旋转动画的效果。mRotateAnimations_3D (-90, 0, cardWidth / 2, 0, 0, true, 0)方法就是在设置旋转的效果。因为有四个选项进行动画效果,所以设置了四个不同的旋转动画。

24

在开始旋转动画时,它的旋转顺序是通过for循环控制的,在循环中通过判断每个选项的位置来判断动画是否播放,以达到播放的效果是一个顺时针的动画。

4.4 本章小结

本章主要介绍了输入法APP的具体实现过程。并在关键部分附上了关键代码及实现的效果图。如设置模块、用户反馈模块等。

25

第5章 系统测试

系统软件的各个功能模块实现后,需要对各个功能模块进行测试。软件测试对于一个系统软件完成的质量有着至关重要的作用。软件测试的手法可以采用黑盒测试或则白盒测试,它们都是模拟用户尽可能的操作不同场景,以发现软件在实现过程中的漏洞,以便及时修复,其目的就是提高软件的健壮性,尽可能的减少由于代码漏洞而带来的损失。

5.1 测试内容及软件环境测试

以下主要是对应用的设置功能、用户反馈功能、输入功能进行测试,在测试时尽可能的进行不同场景的操作,并仔细观察记录程序执行的结果,主要测试用例如表5-1所示。

表5-1 功能模块测试用例表

测试需求 测试重点说明 1.正确进入系统设置,将该输入法APP设置为系统默认输入法,能够设置成功; 2.正确设置为默认输入法,点击设置条目,能够进入设置页面; 设置功能 3.正确进入设置界面,对输入效果进行逐一测试、全选测试,均能达到预期效果; 4.正确进入设置界面,对联想词功能进行测试,实现了预期效果,即在中文输入时能够产生联想词; 1.正确运用该软件,触发输入功能,能够弹出输入法软盘; 2.正确弹出输入法软盘,进行中文输入测试,能够正确输入中文并生成联想词供选择; 3.正确弹出输入法软盘,进行英文输入测试,能够正确输入英文字母及单词; 输入功能 4.正确弹出输入法软盘,进行大写英文字母输入测试,能够正确输入大写英文字母及单词; 5.正确弹出输入法软盘,进行标点符号、阿拉伯数字输入测试,能够正确输入标点符号及阿拉伯数字; 6.正确弹出输入法软盘,进行混合输入及软盘切换测试,能够输入混合型字符且在软盘切换过程中无错误出现; 用户反馈功能 1.正确进入设置界面,点击‘用户反馈’条目,能够正确进入用户反馈界面,且动画实现效果正确; 2.正确进入用户反馈界面,逐一测试个选项条目,均正确。

环境测试内容如表5-2所示:

26

表5-2环境测试

编号 1 2 3 内容 JDK版本 SDK版本 运行环境 说明 Jdk1.7 R22.3 Eclipse 备注 正常 正常 正常 5.2 测试结果

在测试的过程中发现了一些小问题,例如,在选择用户反馈条目时,点击条目选择后不能取消,这不符合用户体验,经修改测试已经改正。另外,一些界面的布局不太美观,这些经过后续调整已经改正。在最终的测试中,各个功能模块均能正常运行。

5.3 本章小结

系统软件在完成后必须要经过专业测试人员进行测试,这是不可省略的环节,因为通过该环节可以验证功能需求是否符合用户需求,功能模块是否能正常运行,若在测试过程中发现不符合用户需求、功能模块出现错误都可以及时修改,以避免将项目送达用户手中才发现错误所造成的重大损失。本章就是根据设计要求对功能需求及功能是否正常运行做了详细的测试,以确定应用的各项功能能够正常运行。

结 论

本篇论文通过对软件实现的可行性分析、软件性能分析以及详细的功能需求分析,设计出了软件实现的功能结构图,然后在结合软件功能结构图进行软件设计,在软件设计过程中实现了功能模块设计、流程设计、交互设计以及数据存储的方式,最后根据软件流程设计实现各个模块的功能,各功能模块实现后最终形成完整输入法APP,输入法APP完成后对各功能模块进行了测试,对测试出的bug进行修正后,最终完成了毕业设计。

该软件是基于Android的输入法的设计与实现,在开发过程中主要运用Eclipse开发工具进行软件开发。目前市场上输入法软件也有很多种,但基于中文输入法的实现的核心技术主要掌握在国外,因此自主开发一款中文输入的输入法是很有必要的。该软件在开发时主要采用Android技术,实现的主要功能是支持中英文输入,设置输入按键效果、支持用户反馈功能等。本设计虽然最终实现了输入法功能,但在实现过程中仍有一些不足之处,例如UI的设计不太美观、软件交互比较少、实现的功能不多,因此会在以后的维护过程

27

中不断地完善该软件的功能及美化界面。

28

致 谢

四年的大学学习生涯还有短暂的十多天,学生的角色即将结束,回首过往,大学四年生活虽不跌宕起伏却丰富充实,我的内心充满感恩与感谢。在此我想对我的老师说感谢您的教育与关心,是你们课堂课下详细的讲解、尽心尽力的栽培才使我在学业上不断地进步,对未来有明确的规划;想对我的同学说感谢你们的陪伴,谢谢你们带给我的欢乐笑语;感谢安阳工学院给了我四年的学习机会,并竭尽可能的为我们创造良好的学习环境与条件。更要感谢父母对我无条件的支持与信任。在安阳工学院生活的四年,让我的生活变得更加充实,让我变得更加有思想更加独立,明白自己的努力方向和最求目标。在本次毕业设计的完成过程中我得到了很多老师和同学的帮助,尤其是我的论文指导老师,张阳老师对我的帮助,每次遇到困难都是老师悉心帮我提供意见、指出解决思路。

在毕业设计实现的每一个阶段,从选题到查阅资料,再到开题报告的填写,直至毕业设计的完成,张阳老师在每个阶段都给予我悉心的指导,尤其是毕业设计项目的调试、后期论文的调整与修改。而且,张阳老师不仅仅在学业上给予我很大的帮助,在思想上也给予了我很大的鼓励,让我对未来的发展方向有了更加明确的认识。同时,在本次毕业设计过程中,也有很多热情的同学给予我很大的帮助。在此我诚挚的感谢张阳老师和各位同学的帮助,以及答辩老师的指导!

29

参考文献

[1] 关丽荣,张晓坤.Java经典实例[M].中国电力出版社.2009 [2] 李佐彬.Android开发入门与实战体验[M].机械工业出版社.2011

[3]伯内特(Ed Burnette),田俊静,张波,黄湘情.Android基础教程(第3版) [M].人民邮电出版社.2011 [4] 韩超,梁泉.Android系统原理及开发要点详解[M],电子工业出版社.2010 [5]邓凡平.深入理解Android(卷1)[M].机械工业出版社.2011

[6]梅尔(Reto Meier),王超.Android 2高级编程(第2版)[M].清华大学出版社.2010 [7]杨丰盛.Android技术内幕:系统卷[M].机械工业出版社.2011 [8]哈希米(Sayed Hashimi)等.精通Android 2 [M].人民邮电出版社.2010 [9]邓凡平.深入理解Android [M].机械工业出版社.2011

[10] E2ecloud工作室.深入浅出Google Android [M].人民邮电出版社.2000 [11]杨丰盛.Android应用开发揭秘[M].机械工业出版社.2010 [12]李刚.疯狂Android讲义[M].2012

[13] 韩超.Android系统级深入开发:移植与调试[M].电子工业出版社.2011

[14] 余志龙,王世江改编.Google Android SDK开发范例大全(第2版)[M].人民邮电出版社.2010 [15]Eric J.Bruno,Greg Bollella.Java实时编程[M].机械工业出版社.2010 [16]公飞.Java核心技术[M].电子工业出版社.2011

[17]韩雪.Java面向对象程序设计(第2版)[M].人民邮电出版社.2012 [18]Metsker S J. Java设计模式(第2版)[M].电子工业出版社.2012 [23]Y.Daniel Liang. Java语言程序设计基础篇. 2014

[19]刘晓义.XML技术及应用[M].哈尔滨工程大学出版社. 2011 [20]张哲.Java程序设计教程与实训[M].北京科海电子出版社.2009 [21]Larry Nyhoff. 数据结构与算法分析. 清华大学出版社. 2006 [22]钱能. C++程序设计教程. 清华大学出版社. 2009

30

因篇幅问题不能全部显示,请点此查看更多更全内容

Top