android键盘输入法整体解读_第1页
android键盘输入法整体解读_第2页
android键盘输入法整体解读_第3页
android键盘输入法整体解读_第4页
android键盘输入法整体解读_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

Android键盘整体解读MethodFramework〕,让我们能够开发自己的输入法。而开发输Android开发实战有很大帮助。简介构造中包含三个主要的局部:中,用来沟通治理全部进程间交互的全局系统效劳。UIIME运行。tE。1、InputManager等〕调用,用来操作输入法。比方,翻开,关闭,切换输入法等。的实例。APIAPI文档,以及秀丽女仆送来的每天三顿饭,CleanRoom,哈哈。InputManager类的位SampleAPIdoc吧。2、InputMethodService包括输入法内部规律,键盘布局,选词等,最终把选出的字符通过commitText提交出来。实现输入extends本类。InputMethodService类的位置/android/inputmethodservice/InputMethodService.html的一个完整实现,你可以再在其根底上扩展和定制。它的主要方法如下:致该函数的执行onBinndInput它在另外的客户端和该输入法连接时调用onStartInput格外重要的一个回调,它在编辑框中用户已经开头输入的时候调用。比方,当点击Sample中很有体会。onCreateInputView返回一个层次性的输入视图,而且只是在这个视图第一次显示的时候被调用onCreateExtractTextView比较特别,是在全屏模式下的一个视图。onStartInputView在输入视图被显示并且在一个的输入框中输入已经开头的时候调用。根本上输入法的定制,都是围绕在这个类来实现的,它主要供给的是一个根本的用户界面框架〔包括输入视图,候选词视图和全屏模式〕,但是这些都是要实现者自己去定制的。这里的实现是让全部的元素己去实现。一些默认的设置包括:候选词视图,它通常是放置在输入视图的上面。Android上面输入,编辑框会自动变形腾出一个软键盘的位置来。两个格外重要的视图:onCreateInputView的时候返回一个的实例。通过调用系updateInputViewShown来重估量一下。来设置是否需要显示这个视图。正是由于这个显示的频繁性,所以它一般不会被销毁,而且不会转变当前应用程序的视图。InputConnectionIME和应用程序的:能够直接产生想要的按键信息,甚至直接在候选和提交的文本中编辑。当用户在不同的输入目标和做的就是复位状态,并且应对的输入框的信息。SampleSoftKeyboard来说明这些问题。Eclipse工程Sample1.5KeyBoard的子类,这里特别SettingSample,需要在Language&keyboardSample的名称。会消灭安全提示。IME确实要选择自己信任的,由于它可以收集和记录全部你的输入,这个特性假设被有心人利用会很恐惊。作为我们的输入法之后,进入需要输入法的地方,这里以短信界面作keyboard。keyboard键盘如下:三、配置和资源文件解析除去源代码将在后文统一分析之外,这里介绍下配置和资源文件。AndroidMainifest.xmlInputMethod接口,这也是全部的输入法的接口。名目名目,放置的是图标文件。xml文件。strings.xmlime_name定义了该输入法的名字word_separators词的分隔符,即输入过程中可能用来表示一个词输入完成的符号,比方空格,标点等等〕label_xx_key为软键盘定义确认键的标签。在后面代码解析中可以看到,程序会依据输入框的信的图标或者标签。如:在一个网址上面输入,就会显示一个搜寻的图标,而在编辑短EnterKeyNext标签,用来直接跳到短信正文局部。dimens.xml,定义软键盘的尺寸信息,包括键高(key_height),候选词字体的高度(candidate_font_height),候选词垂直间隙(candidate_vertical_padding)。color.xml,定义候选词的背景颜色,比方正常(candidate_normal),推举(candidate_background)和其它(candidate_other)等颜色。id(android:id=“@+id/keyboard“),放置在屏幕下方(android:layout_width=“match_parent“),垂直包含子内容(android:layout_height=“wrap_content“)。名目,文件如下:method.xml,为搜寻治理供给配置信息。四、源代码解析〔一〕概述CandidateView,LatinKeyboardLatinKeyboardView,SoftKeyboard这四个文件:负责显示软键盘上面的那个候选区域。负责解析并保存键盘布局,并供给选词算法,供程序运行当中使用。其中键盘布局是b、a两个字母。LatinKeyboard就负CandidateView上。CandidateView合起来,组成了InputView,就是我们看到的软键盘。edde。〔二〕LatinKeyboard.javaxmlKeyboard的布局,来实现一个输入拉丁文的键盘。这里只是创立一个键盘对象,并不对具体的布局给出手段。Keyboard类。Keyboard可以载入一个用xml来初始化自己,并且可以保存这些键盘的键的属性。他有三个构造函数:Keyboard(ContextcontextintxmlLayoutResIdintmodeId),这个和上面差不多,只不过多modeld。Keyboard(Contextcontext,intlayoutTemplateResId,CharSequencecharacters,int依据从左往右,从上往下的方式填满这个模板。keyboard,直接用了父类构造函数进展初始化。intx,inty,KeyLatinKey对象好了。从这里我们能看出面对对象和使用框架的要求。的函数,这是一个回调函数,它在键盘描绘键的时候(x,y)坐标处。它还推断了该键是否是回车键,并KeyLatinKey对象。从这里我们能看出面对对象和使用框架的要求。此外,还有一个函数是:setImeOptions,它是依据编辑框的当前信息,来为这个键盘的回车键设置labelicon。在这个函数中,有一个技巧是用了EditorInfoAction信息,这里有:icon,只IME_ACTION_NEXTnext操作,将用户带入到该文本框的写一个输入框中。如:编辑短消息的时nextNEXTlabel就行了。操作,默认动作就是搜寻。如:URL框中输入的时候,默认的icon。IME-ACTION_SENDsend操作,默认动作就是发送当前的内容。如:短消息的内容框里面输入的Label:SEND:returnicon即可。最终,它还定义了一个内部类——LatinKey,它直接继承了Key,来定义一个单独的键,它唯一重载intyCANCELY10px,依据他的解释是用来复原这个可以关掉键盘的键的目标区域。〔三〕LatinKeyboardView.javaView,由于前面创立的键盘只是一个概念,并不能实例出来一个。CANCELCANCEL键,然后发送了一个未知的代码的键。〔四〕CandidateView.java在我们输入字符时,它应当能依据字符显示确定的提示,比方拼音同音字啊,联想的字啊之类的。先看它定义了那些重要变量:view是为什么输入法效劳的。mSuggestions:建议。比方说当我们输入一些字母之后输入法期望依据输入来进展联想建议。mSelectedIndex:用户选择的词的索引。mSelectionHighlight:描绘选择区域高亮的类。:word是否合法正确。mBgPadding:背景填充区域。mWordWidth:每个候选词的宽度。mColor*:定义了各种颜色。mPaint:一个绘图类,后面会用到mVerticalPadding:垂直填充区域。mTargetScrollX:目标滚动的横坐标,即要将目标滚动到何处。mTotalWidth:总的宽度mGestureDetector:声明一个手势监测器。这是一个与动作大事相关的类,可以用来检测各种动作大事,这里称之为:手势监测器。它的回调函数是要使用这个通常要先建立一个对象,如同代码里表达的,然后设置GestureDetector.OnGestureListeneronTouchEvent(MotionEvent)中写入动作发生要执行的代码。构造函数,主要是对一些变量的初始化工作。drawablesetState方rescolor.xml文件来定义用到的全部颜色资RR.java的内容里,可以直接引用。剩下的内容就是初viewcolor.xml内定义的了。用这样的方式获得:Resourcesr=context.getResources;获得当前资源对象的方法。setBackgroundColor(r.getColor(R.color.candidate_background));ListeneronScroll,scroll动作的时候触发。在这个函数里,主要是进展滑动的推断。getScrollY);invalidate;我们分别解释如下:view的横坐标scrollTo:滚动到目标坐标view的纵坐标view重画onscrollX轴距离。假设这个view之前没有被滚动过,第viewscrollTo这个位置。假设sxscrollTosx处,也就是不动。也就是说:系统滚动产生一个惯性的view实际到了XdistanceX,这个distanceX不是两个动作view就不再滚动,或者说是原地滚动。接下来:在水平滚动时,水平边是否淡出。setWillNotDraw(false);//view不自己绘制自己setHorizontalScrollBarEnabled(false);//不设置水平滚动条setVerticalScrollBarEnabled(false);//不设置垂直滚动条setService是设置宿主输入法。度。view的大小。当调用这个函数时必需在内部调用来对宽和高进展保存,否则将会有特别消灭。这里重载它是为了系统检测要绘制resolveSizepadding来确定。为空,则直接调用父类来画。在这里的内部规律或许如下:推断是否有候选词,没有的话就不用绘制。view的背景中得到即可。对于每一个候选词,得到其文本,然后计算其宽度,然后再加上两边的空隙。+滚动了的位置。假设是在当前词的左边到右边之间,则将高亮区域绘制在画布上面,高亮区域设置的大小即为当前词的大小,并且保存被选词的索引。选粗,然后进展绘制。推断目标滚动是否是当前的,不是就需要滚动过去。调整,之后滚动到相应坐标。setSuggestions,设置候选词,之后进展绘制。gesturedetector监听的动作,假设不分类反响:向下:没动作;向上:需要手动选择候选词。x处的词,这个处理的是用户轻轻点击键盘,也就是选择候选词。removeHighlight,去除高亮显示。〔五〕SoftKeyboard.java上面的文件,都是为了这个类效劳的。总体来说,一个输入法需要的是一个输入视图,一个候选词视图,还有一个就是和应用程序的链接。根本时序图如下:Service开头进展初始化工作。于是便有了如图中的一系列动作。UI方面的初始化,即字符串变量词汇分隔符的初始化。UI初始化的地方,创立以后和配置修改以后,都会KeyboardXML文件中读取软键盘信息,封装进Keyboard对象。方法,在这里,我们被绑定到了客户端,接收全部关于编辑对象的具体信息。入法首次显示时,或者配置信息转变时,该方法就会被执行。在该方法中,对inputview进展初始化:读keyboard。candidateview进展初始化。第六个方法,也是最终一个方法,即onStartInputView,正是在这个方法中,将inputview和当前重关联起来。两个方法只有在初始化时才会执行一次,除非有配置信息发生转变。那么到底什么是配置信息发生转变呢?在看eIdoverrideandroid源码包中的SoftKeyboardSamplePinyinIME的源码。的自己解析(4)》。五、输入法调试用持续。EclipseAndroid应用程序》模式,在这个模式下面,DDMS将链接到正在运行的手机或模拟器,并且能够提“DebugselectedProcess”,就能够将调试器植入到这个效劳上面。debug样调试这个输入法了。通过onCreateInputView->onCreateCandidatesView,而在这个时候,这个输入法的界面一点儿都还没有显现出来。当我们在一个输入框中点击鼠标时,系统会产生一个大事,最开头就被输入法捕获,然后再将把握权交给这个输入法。reset工作。全部的键盘等大事,都会首先传递给输入法,所以,假设一个按键大事不是我们所能够处理的问题,我们需要将这个大事连续传递下去,而不要丢弃了,由于这可能是别的控件的事情。content输入框,首先调用的是onFinishInput,onStartInputView,让界面显示出来。接着onStartInput,表示开头正式的输入。在这过程中,要完成依据不同的输入框,选择不同的键盘,”g”handleCharacter。这里的策Composing增加,并且更这个候选词的列表。这里有一个很微妙的就会置这个开关为关,直接将键入的输入到文本框中去。法的原来面目。bug。六、输入法的调用EditTextwidget。EditText一样连接输入法,介绍如下:交选中字符。publicclassMyBaseInputConnectionextendsBaseInputConnection{publicMyBaseInputConnection(ViewtargetView,booleanfullEditor){super(targetView,fullEditor);}publicstaticStringtx=““;@OverridepublicbooleancommitText(C

温馨提示

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

评论

0/150

提交评论