android键盘输入法整体解读(转)
Android输入法架构学习报告

安卓输入法框架(Input Method Framework)IMF 一.输入法框架简介自Android平台 1.5版本以后,Google开放了Android平台输入法框架(InputMethod Framework, IMF) ,IMF是Android平台的特色设计。
它的出现大大推动了不带实体键盘的设备的诞生。
同时,Android平台输入法框架也给出了输入法的开发所需要的接口,为Android平台的输入法提供了可扩展性。
二.输入法框架组成一个IMF结构中包含三个主要的部分:●(输入法服务)input method manager(IMM):管理各部分的交互,是一个客户端API,存在于各个应用程序的context中,用来沟通管理所有进程间交互的全局系统服务,可以通过Context.getSystemService()来获取一个InputMethodManager 的实例。
●(输入法应用)input method(IME):实现一个允许用户生成文本的独立交互模块。
系统绑定一个当前的输入法。
使其创建和生成,决定输入法何时隐藏或者显示它的UI。
同一时间只能有一个IME运行。
●(客户端)client application:通过输入法管理器控制输入焦点和IME的状态。
一次只能有一个客户端使用IME。
输入法整体框架如图1所示:图1.输入法的总体框架2.1 IMM的实现InputMethodManagerService.java 是整个系统当中,一切与输入法有关的地方的总控制中心。
它通过管理下面三个模块来实现系统的输入法框架。
(1)WindowManagerService负责显示输入法,接收用户事件。
(2)InputMethodService输入法内部逻辑,键盘布局,选词等,最终把选出的字符通过commitText 提交出来。
(3)InputManager由UI 控件(View,TextView,EditText 等)调用,用来操作输入法。
如何进行Android应用的自定义键盘和输入法开发(八)

Android应用的自定义键盘和输入法开发是一个具有一定挑战性的任务,但也是一个充满创造力和乐趣的过程。
在这篇文章中,我们将探讨如何进行Android应用的自定义键盘和输入法开发,带您深入了解这个领域的知识和技术。
一、理解Android键盘和输入法在开始自定义键盘和输入法开发之前,我们首先需要了解Android键盘和输入法的工作原理。
Android中的键盘和输入法是基于InputMethodManager类实现的,通过监听用户的输入行为,将输入内容传递给应用程序。
二、键盘布局设计设计键盘布局是自定义键盘的第一步。
在Android中,键盘布局由一个xml文件定义。
在这个文件中,您可以指定键盘的外观和按键的功能。
您可以选择使用系统提供的键盘布局,也可以根据自己的需求定义一个新的键盘布局。
在设计键盘布局时,需要考虑以下几个方面:1. 键盘的大小和外观:您可以设置键盘的宽度和高度,以及键盘按键的样式和颜色。
2. 键盘按键的功能:您可以给每个按键指定一个功能,例如字母、数字、符号等。
三、输入法服务自定义键盘的下一步是创建一个输入法服务。
输入法服务是一个运行在后台的服务,负责接收用户输入,并将输入内容传递给应用程序。
在创建输入法服务时,您需要实现InputMethodService类,并覆盖其方法来处理用户的输入和键盘事件。
您还可以调用InputMethodManager类的方法来控制键盘的显示和隐藏。
四、输入法界面输入法界面是输入法的可见部分,它允许用户与键盘进行交互。
您可以自定义输入法界面的样式和布局,添加功能和特效。
在创建输入法界面时,您可以使用Android提供的一些UI组件,如EditText、TextView等。
您还可以使用自定义的布局文件来设计输入法界面,以满足您的需求。
五、实现基本功能在自定义键盘和输入法开发中,有一些基本的功能是需要实现的。
其中包括:1. 键盘切换:您可以实现多个键盘布局,并提供一个切换按钮,使用户能够在不同的键盘布局之间进行切换。
安卓手机打字键盘操作方法

安卓手机打字键盘操作方法
1. 打开手机上的应用程序或者浏览器,在需要输入文字的地方点击一下,弹出键盘。
2. 在键盘上找到要输入的字母或者符号,轻触一下即可输入。
3. 如果你想输入大写字母,可以点击键盘上的“Shift”按钮,再点击相应的字母键。
4. 如果你想输入数字和符号,可以点击键盘上的“123”按钮,然后选择数字和符号键。
5. 如果你需要输入中文,可以点击键盘上的“中/英”按钮,然后选择中文输入法。
6. 如果你想输入特殊符号,可以长按相应的字母或者符号键,弹出符号列表,选择相应的符号。
7. 如果你想删除已输入的文字,可以点击键盘上的“删除”按钮,直到删除完整个文字。
8. 如果你想输入换行,可以点击键盘上的“换行”按钮或者按下“Enter”键。
9. 在一些应用程序中,可能还有一些特殊的输入操作方法,比如表情符号、剪贴板等,可以根据具体应用程序的要求来操作。
android键盘映射

key 52 PERIOD
key 28 ENTER
key 56 ALT_LEFT
key 42 SHIFT_LEFT
key 215 AT
key 57 SPACE
key 53 SLASH
key 127 SYM
注:
Android的应用不仅仅是平板电脑,MID,phone,还可以放到STB机顶盒,智能家庭终端上面去,所以按键的映射是一定要自定义的,不管按键是固定在设备上,还是通过无线设备还是蓝牙遥控,都需要键的映射。
Android也是基于Linux的核心,大部分时候都是操作系统在调度任务,执行任务。相应的,Android输入系统也是遵循LINUX的input输入输出子系统,关于这部分的分析可以Google,有许多原理方面的分析。Android使用标准的Linux输入事件设备(/dev/event0),驱动描述可以查看内核树头文件include/linux/input.h。如果想深入学习Linux input subsystem,可以访问:/?p=linux/k ... /linux-2.6.24.y.git;a=blob;f=Documentation/input/input.txt
android/src/device/product/generic/tuttle2.kl
# Copyright 2007 The Android Open Source Project
key 2 1
key 3 2
key 4 3
key 5 4
key 6 5
1 窗口管理器从Linux键盘驱动获取键盘事件 按键消息不指定任何逻辑事件,它只与其硬件位置有关, 也就是说,按键的键盘码没有任何软件含义,映射键盘码
如何进行Android应用的自定义键盘和输入法开发(三)

如何进行Android应用的自定义键盘和输入法开发随着移动设备的普及,Android应用的开发需求也越来越多样化。
其中,自定义键盘和输入法的开发是一个越来越受欢迎的领域。
自定义键盘和输入法能够给用户带来更好的使用体验,满足个性化需求。
本文将介绍如何进行Android应用的自定义键盘和输入法开发。
1. 理解Android输入法框架在开始自定义键盘和输入法的开发之前,我们首先需要了解Android输入法框架。
Android输入法框架是一个强大的工具,它提供了丰富的API和接口,使我们能够定制化各种键盘和输入法。
我们可以通过扩展Android输入法框架来创建我们自己的键盘和输入法。
2. 创建自定义键盘布局自定义键盘的第一步是创建一个自定义布局。
我们可以使用XML文件来定义我们的键盘布局。
在布局中,我们可以包括各种按钮、文本框等。
通过合理的布局设计,我们可以实现键盘的各种功能,如数字键盘、符号键盘等。
此外,我们还可以为键盘添加样式和主题,使其更加美观和易于使用。
3. 处理键盘事件在自定义键盘中,键盘事件的处理非常重要。
我们需要在代码中定义各个按键的响应动作。
通过监听按键事件,我们可以实现各种功能,如文本输入、删除字符等。
在处理键盘事件时,我们可以使用Android提供的KeyEvent类来获取按键的信息,如按键码、按键状态等。
通过合理的事件处理,我们能够实现键盘的各种功能,提高用户的使用体验。
4. 创建自定义输入法除了自定义键盘,我们还可以创建自定义输入法。
自定义输入法是一种更加灵活和强大的方式,它可以提供更多个性化的输入功能。
创建自定义输入法的方法与创建自定义键盘类似,只是在布局和事件处理上有所区别。
我们可以在自定义输入法中加入更多的输入选项,如手写输入、语音输入等。
通过灵活运用Android输入法框架,我们能够创建功能丰富、个性化的输入法。
5. 优化用户体验在进行自定义键盘和输入法开发时,我们还需要考虑用户体验的优化。
手机输入法的分析与研究

手机输入法的分析与研究手机输入法是每天被使用最频繁的工具之一,但很少有人去思考它是如何工作的。
本文将对手机输入法的构成、发展史、用户需求分析以及未来发展等方面进行研究和分析。
一、构成手机输入法一般由输入框、输入内容预测、按键、联想和纠错等五个部分构成。
输入框:输入框占据了手机输入法界面的主要位置,用于显示用户输入的文字。
它的外观和大小随着手机品牌和操作系统的不同而有所差异。
输入内容预测:当用户输入一个字母时,输入内容预测会根据已知单词的频率和使用习惯猜测用户接下来想输入的字母或词组。
按键:按键是用户可以点击的按钮,根据用户输入的字符显示在按键上,用户通过按下按键选择输入的字符。
联想:联想是在用户输入完毕后,输入法综合之前输入的单词和用户打字速度,自动生成完整的拼音或词组,帮助用户更快地完成输入作业。
纠错:纠错是根据输入法中保存的常用单词、语法规则和上下文来检测用户输入的错误,并给出正确的建议或自动更正。
二、发展史随着智能手机的普及,手机输入法也逐步能够满足人们的饮食文化、民俗习惯和对多元文化体验的需求。
2013年,谷歌对Android手机系统的输入法进行了分离,以便其他厂商开发自己的输入法。
各种输入法如今已经充斥市场,日常生活中经常听到“搜狗输入法”、“百度输入法”、“微软输入法”等。
随着智能手机操作系统的发展,用户对手机输入法的要求也变得越来越高。
比如,支持多语言输入、emoji表情输入、输入语音和手写输入等。
而随着技术的发展,人工智能技术开始在手机输入法中得到应用。
谷歌的gboard输入法可以自动识别并转换一些常用的语言,比如英文和法语。
百度语音输入法可以通过语音输入、支持精度增强功能等,创造优秀的语音输入体验。
三、用户需求分析手机输入法的适用对象包括了从初中学生到工程师,从会计到商人等等。
由此可见,手机输入法的用户需求也变得越来越多样化。
但是,无论是哪种类型的用户,他们对手机输入法的基本需求仍是相同的。
手机输入法你试过这样用吗

手机输入法你试过这样用吗手机输入法是我们日常生活中必不可少的工具之一,如何高效地使用手机输入法成为了现代社会中普遍的一项技能。
在使用手机输入法时,许多人都采用了常规的输入方式,比如逐个字母输入或采用拼音输入方式等。
但是,手机输入法其实有许多实用的快捷功能,只需要掌握一些技巧,便可提升输入速度和输入准确率。
这篇文章将针对手机输入法的各种实用功能,为大家提供一些实用的技巧和建议。
一、快速切换中英文输入在 Android 系统中,切换中英文输入的快捷键方式如下:1. 按住“空格键”,然后向右滑动即可切换为英文输入;二、语音输入——说话就是写字在部分语言表达上,我们往往是更加口语化的。
语音输入功能的出现,为我们加深了输入方式的多元化,能够让我们更加便捷的完成输入。
大家可以使用手机输入法中的语音输入功能,通过语音键盘以语音的方式输入文字。
尤其在紧急情况下,语音输入将会比打字更加方便,同时也不会打断焦点,不会打扰到别人。
三、智能输入——大幅提高准确率手机输入法中的智能输入功能通常会记录我们在手机上打过的文字,通过统计我们在打字过程中常用的字母和词汇,然后根据统计结果和机器学习算法来推荐出下一步最有可能使用的一组字母或词汇。
这种方式能够有效地提高打字准确率,并且能够大幅度提升打字速度。
如果你是一个爱玩手游的人,建议你把“智能输入”关闭,目的是避免设置影响打字进度跳出游戏影响游戏体验。
四、滑动输入——另一种全新的输入方式滑动输入又称划动输入,是另一种全新的输入方式。
在这种输入方式下,用户可以通过在字母间划动手指,输入完整的单词或一段语句。
滑动输入实际上是一种预测式输入,打字速度较快。
在手机输入法中,滑动输入通常是通过滑动到具体的字母上时停留一段时间后出现预测结果。
如果这时出现了想要输入的单词,只需要抬起手指即可输入。
这种输入方式适合于惯用一个手指输入的人,能够更快地输入文章。
五、翻译——跨语言交流,畅通无阻如果你需要阅读或输入其他语言文字内容,能够简单地进行翻译将是十分有用的。
android输入法02:openwnn源码解析02—Keyboard和KeyboardView

android输入法02:openwnn源码解析02—Keyboard和KeyboardView本文主要介绍openwnn对Keyboard和KeyboardView的处理。
这一部分主要涉及三个类:InputViewManager.java,DefaultSoftKeyboard.java,DefaultSoftKeyboardJAJP.java。
其中InputViewManager是与键盘相关的对外接口,DefaultSoftKeyboard是通用类,DefaultSoftKeyboardJAJP是日文定制类。
1、InputViewManager第一步我们先来看看InputViewManager。
这个接口类代码很简单:[java]view plaincopy1./**2. * The interface of input view manager used by OpenWnn.3. *4. * @author Copyright (C) 2009 OMRON SOFTWARE CO., LTD. All Rights Reserved.5. */6.public interface InputViewManager {7. /**8. * Initialize the input view.9. *10. * @param parent The OpenWnn object11. * @param width The width of the display12. * @param height The height of the display13. *14. * @return The input view created in the initialize process; {@code null} if cannot create a input view.15. */16. public View initView(OpenWnn parent, int width, int height);17.18. /**19. * Get the input view being used currently.20. *21. * @return The input view; {@code null} if no input view is used currently.22. */23. public View getCurrentView();24.25. /**26. * Notification of updating parent's state.27. *28. * @param parent The OpenWnn object using this manager29. */30. public void onUpdateState(OpenWnn parent);31.32. /**33. * Reflect the preferences in the input view.34. *35. * @param pref The preferences36. * @param editor The information about the editor37. */38. public void setPreferences(SharedPreferences pref, EditorInfo editor);39.40. /**41. * Close the input view.42. */43. public void closing();44.}从这个接口文件中,我们可以看出在输入法处理中,对于键盘部分需要涉及的操作并不是很多。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android键盘整体解读Android就开放它的IMF(Input Method Framework),让我们能够开发自己的输入法。
而开发输入法最好的参考就是Android自带的Sample-SoftKeyboard,虽然这个例子仅包含英文和数字输入,但是它本身还算完整和清楚,对我们开始Android开发实战有很大帮助。
一、IMF简介一个IMF结构中包含三个主要的部分:input method manager:管理各部分的交互。
它是一个客户端API,存在于各个应用程序的context 中,用来沟通管理所有进程间交互的全局系统服务。
input method(IME):实现一个允许用户生成文本的独立交互模块。
系统绑定一个当前的输入法。
使其创建和生成,决定输入法何时隐藏或者显示它的UI。
同一时间只能有一个IME运行。
client application:通过输入法管理器控制输入焦点和IME的状态。
一次只能有一个客户端使用IME。
1、InputManager由UI控件(View,TextView,EditText等)调用,用来操作输入法。
比如,打开,关闭,切换输入法等。
它是整个输入法框架(IMF)结构的核心API,处理应用程序和当前输入法的交互。
可以通过Context.getSystemService()来获取一个InputMethodManager的实例。
在开发过程中,最基础最重要的就是养成阅读API的习惯。
优秀的程序员要养成把自己关在小黑屋里,断绝与外界的联网和联系,仅仅靠自己电脑中的开发环境和API文档,以及漂亮女仆送来的每天三顿饭,写出优秀的程序。
这个在武侠小说中叫闭关,在软件开发中叫Clean Room,哈哈。
Android的API文档在:%SDK_ROOM%/docs/reference/index.html,InputManager类的位置:%SDK_ROOM%/docs/reference/android/view/inputmethod/InputMethodManager.html 由于,该类跟本次要讲的Sample关系不大,这里就不详细分析,请各位自行阅读API doc吧。
2、InputMethodService包括输入法内部逻辑,键盘布局,选词等,最终把选出的字符通过commitText提交出来。
实现输入法的基础就是名为InputMethodService的类,比如你要实现一个谷歌输入法,就是要extends本类。
我们接下来要学习的SoftKeyboard Sample也是extends本类。
InputMethodService类的位置在:%SDK_ROOM%/docs/reference /android/inputmethodservice/InputMethodService.html InputMethodService是InputMethod的一个完整实现,你可以再在其基础上扩展和定制。
它的主要方法如下:onInitializeInterface() 顾名思义,它在初始化界面的时候被调用,而一般是由于配置文件的更改导致该函数的执行onBinndInput() 它在另外的客户端和该输入法连接时调用onStartInput() 非常重要的一个回调,它在编辑框中用户已经开始输入的时候调用。
比如,当点击一个输入框,我们需要根据这个输入框的信息,设置输入法的一些特性,这个在Sample中很有体会。
onCreateInputView() 返回一个层次性的输入视图,而且只是在这个视图第一次显示的时候被调用onCreateCandidatesView() 同onCreateInputView(),只不过创建的是候选框的视图。
onCreateExtractTextView() 比较特殊,是在全屏模式下的一个视图。
onStartInputView() 在输入视图被显示并且在一个新的输入框中输入已经开始的时候调用。
基本上输入法的定制,都是围绕在这个类来实现的,它主要提供的是一个基本的用户界面框架(包括输入视图,候选词视图和全屏模式),但是这些都是要实现者自己去定制的。
这里的实现是让所有的元素都放置在了一个单一的由InputMethodService来管理的窗口中。
它提供了很多的回调API,需要我们自己去实现。
一些默认的设置包括:软键盘输入视图,它通常都是被放置在屏幕的下方。
候选词视图,它通常是放置在输入视图的上面。
当我们输入的时候,需要改变应用程序的界面来适应这些视图的放置规则。
比如在Android上面输入,编辑框会自动变形腾出一个软键盘的位置来。
两个非常重要的视图:1. 软输入视图。
是与用户交互的主要发生地:按键,画图或者其他的方式。
通常的实现就是简单的用一个视图来处理所有的工作,并且在调用onCreateInputView()的时候返回一个新的实例。
通过调用系统的onEvaluateInputViewShow()来测试是否需要显示输入视图,它是系统根据当前的上下文环境来实现的。
当输入法状态改变的时候,需要调用updateInputViewShown()来重新估计一下。
2. 候选词视图。
当用户输入一些字符之后,输入法可能需要提供给用户一些可用的候选词的列表。
这个视图的管理和输入视图不大一样,因为这个视图是非常的短暂的,它只是在有候选词的时候才会被显示。
可以用setCandidatesViewShow()来设置是否需要显示这个视图。
正是因为这个显示的频繁性,所以它一般不会被销毁,而且不会改变当前应用程序的视图。
最后,关于文本的产生,这是一个IME的最终目的。
它通过InputConnection来链接IME和应用程序的:能够直接产生想要的按键信息,甚至直接在候选和提交的文本中编辑。
当用户在不同的输入目标之间切换的时候,IME会不断的调用onFinishInput() 和onStartInput()。
在这两个函数中,需要反复做的就是复位状态,并且应对新的输入框的信息。
以上是一个输入法的最基本的介绍,下面将根据Sample中的SoftKeyboard来说明这些问题。
二、创建Eclipse工程这里使用最新版本的Android SDK 2.3.3下的SoftKeyboard Sample来创建工程,其实,从1.5版本,该Sample就已经存在了。
同时,由于SoftKeyboard会使人误解为KeyBoard的子类,这里特别改名为InputMethodServiceSample,更符合其功能和特性。
点击Finish,完成项目的创建,可以看到项目工程结构如下:在Android SDK 2.3.3模拟器上运行本Sample,需要在Setting中选择使用本Sample,需要在Language&keyboard中选中本Sample的名称。
当尝试选中Sample Soft Keyboard时,Android会出现安全提示。
IME的确要选择自己信任的,因为它可以收集和记录所有你的输入,这个特性如果被有心人利用会很恐怖。
选中Sample Soft Keyboard作为我们的输入法之后,进入需要输入法的地方,这里以短信界面作为范例,在输入框中长按,会出现“编辑文本”选单,点击“输入法”即可进入当前输入界面的输入法选择框。
就可以使用输入法切换到本输入法看到它的keyboard。
之后就可以看到Soft keyboard键盘如下:三、配置和资源文件解析除去源代码将在后文统一分析之外,这里介绍下配置和资源文件。
1. AndroidMainifest.xml每个Android应用都会有的配置描述文件。
在这里,Sample把自己声明成了服务,而且绑定在了输入法之上。
它的intent-filter是直接用的InputMethod接口,这也是所有的输入法的接口。
2. res目录放置resource,即资源文件,里面蛮多东西的,具体如下。
(1) drawable目录,放置的是图标文件。
(2) values目录,包含strings.xml以及一些自定义的类型和值的xml文件。
strings.xml― ime_name 定义了该输入法的名字― word_separa tors 词的分隔符,即输入过程中可能用来表示一个词输入完成的符号,比如空格,标点等等)― label_xx_key 为软键盘定义确认键的标签。
在后面代码解析中可以看到,程序会根据输入框的信息来设置EnterKey的图标或者标签。
如:在一个网址上面输入,就会显示一个搜索的图标,而在编辑短信时,如果在收信人写,那么EnterKey就是Next标签,用来直接跳到短信正文部分。
dimens.xml,定义软键盘的尺寸信息,包括键高(key_height),候选词字体的高度(candidate_font_height),候选词垂直间隙(candidate_vertical_padding)。
color.xml,定义候选词的背景颜色,比如正常(candidate_normal),推荐(candidate_recommended),背景(candidate_background)和其它(candidate_other)等颜色。
(3) layout目录,保存布局配置文件。
这里只有一个配置文件:input.xml,它定义的是输入视图的信息,包括id(android:id="@+id/keyboard"),放置在屏幕下方(android:layout_alignParentBottom="true"),水平最大填充(android:layout_width="match_parent"),垂直包含子内容(android:layout_height="wrap_content")。
(4) xml目录,文件如下:method.xml,为搜索管理提供配置信息。
qwerty.xml,英文字符的全键盘布局文件。
定义很直观,很容易就可以看懂。
symbols_shift.xml和symbols.xml,是标点字符的全键盘布局文件。
四、源代码解析(一)概述从InputMethodServiceSample项目可以看出实现一个输入法至少需要CandidateView, LatinKeyboard, LatinKeyboardView,SoftKeyboard这四个文件:CandidateView负责显示软键盘上面的那个候选区域。
LatinKeyboard负责解析并保存键盘布局,并提供选词算法,供程序运行当中使用。
其中键盘布局是以XML文件存放在资源当中的。
比如我们在汉字输入法下,按下b、a两个字母。