Android的文本和输入---创建输入法(二)

来源:互联网 发布:手机淘宝如何发链接 编辑:程序博客网 时间:2024/04/26 21:42

输入法API

有IME的类可以在android.inputmethodserviceandroid.view.inputmethod包中找到。KeyEvent类对于处理键盘字符至关重要。

IME的核心部分是服务组件,它继承InputMethodService类。除了实现了标准的服务生命周期,这个类还给IME的UI提供了回调方法,用于处理用户的输入,并且把文本发送给当前具有输入焦点的文本域。默认情况下,InputMethodService类提供了用于管理IME状态和可见性的大多数实现,并且跟当前的输入域进行通信。

下面的类也很重要:

BaseInputConnection

这个类定义InputMethod类跟接收它输入的应用程序之间的通信通道。使用这个通道来读取光标范围内的文本,把文本提交给文本框,以及把原始的按键事件发送给应用程序。应用程序应该继承这个类,而不是实现基本接口:InputConnection

KeyboardView

   这个类是View类的一个子类,它展现一个软键盘,并响应用户输入的事件。该软键盘          的布局是由一个Keyboard类的实例来指定的,你可以在XML文件中定义它的布局。

设计输入法的UI                                                                       

对于IME来说,有两个主要的可视元素:input view和candidates view。你只需要实现那些跟你所设计的输入法相关的元素。

Input view

   Input view是用户点击键盘、手写或使用手势输入文本的UI。当IME首次显示的时候,系统会调用它的onCreateInputView()回调方法。在这个方法的实现中,你要创建你想要的IME窗口的布局,并把该布局返回给系统。以下是onCreateInputView()方法的实现示例:

       @Override 

   public View onCreateInputView() {

       MyKeyboardView inputView =

           (MyKeyboardView) getLayoutInflater().inflate( R.layout.input, null);

   

       inputView.setOnKeyboardActionListener(this); inputView.setKeyboard(mLatinKeyboard);

       

       return mInputView;

   }

在这个例子中,MyKeyboardView是一个定制的KeyboardView类实现的实例,它展示了一个软键盘。如果你是创建一个传统的QWERTY软键盘,请看软键盘的示例程序:sample app,看。它是如何继承KeyboardView类的。

Candidates View

Candidates View是用户选择候选字的地方。在IME生命周期中,在准备显示Candidate View的时候,系统会调用它的onCreateCandidatesView()回调方法。在这个方法的实现中,它会返回一个建议候选字的布局,如果没有要显示的内容,它会返回null(如果你提供候选建议,那么你就不必实现这个方法,因为null响应是默认的行为)。

UI设计要考虑的因素

接下来介绍以下设计IME的UI时要特别考虑的一些因素:

1. 处理多种屏幕尺寸

你的IME的UI必须能够根据不同的屏幕尺寸来进行缩放,并且也必须处理横竖屏的差异。在非全屏的IME模式中,要给你的应用程序留有足够的显示文本域和对应内容的空间,IME所占用的屏幕空间不应该超过半屏。在全屏的IME模式中,这就不是一个问题,

2. 处理不同的输入类型

Android的文本域允许你给它设置特殊的输入类型,如文本、数字、URL、Email地址和搜索字符串等。当你实现一个新的IME时,你需要检查每个输入域的输入类型,并提供相应的UI界面。这样你就不必检查用户键入的文本是否是有效的输入类型,因为应用程序的文本域自己会负责这件事情。

例如,以下拉丁语IME的界面截图分别提供了文本和电话号码的输入:

图2.拉丁语IME输入类型

当一个输入域接收到焦点并且IME启动时,系统会调用onStartInputView()回调方法,系统给这个方法传入了一个EditorInfo对象,它包含了输入类型的细节和其他的文本域属性。在这个对象中,inputType字段包含了文本域的输入类型。

inputType字段整数型字段,把包含了各种输入类型设置的位模式。要检查文本域的输入类型,要用TYPE_MASK_CLASS常量来进行掩码运算,如:

inputType&InputType.TYPE_MASK_CLASS

输入类型的位模式可以是下列值之一:

TYPE_CLASS_NUMBER

接收数字的文本域。

TYPE_CLASS_DATETIME

接收日期和时间的文本域。

TYPE_CLASS_PHONE

接收电话号码的文本域

TYPE_CLASS_TEXT

接收所有的被支持的字符的文本域。

这些常量的详细介绍,请参照InputType文档。

InputType字段可以包含其他的指示文本域类型变化的位,如:

TYPE_TEXT_VARIATION_PASSWORD

它是TYPE_CLASS_TEXT类型的变体,用于输入密码。输入法会用修饰符号来代替实际文本的显示。

TYPE_TEXT_VARIATION_URI

它是TYPE_CLASS_TEXT类型的变体,用于输入网址和其他类型的URI。

TYPE_TEXT_FLAG_AUTO_COMPLETE

它是TYPE_CLASS_TEXT类型的变体,用于输入应用程序从字典、搜索或其他便利的地方获取的自动完成的文本。

警告:在你自己的IME中,当你把文本发送给密码文本域时,要确保正确的处理这些文本,因为在Input View 和Candidates View的UI中密码都是要隐藏的。还要记住不应该把密码保存在设备上。

 

原创粉丝点击