`
phenom
  • 浏览: 406080 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

(DOC)Onscreen Input Methods

 
阅读更多
Onscreen Input Methods,屏幕键盘
从1.5开始,Android系统提供了一个输入框架(IMF),这个框架可以创建输入法软件键盘。这篇文章就是提供了一个输入法IME的概览,与应用程序的相关操作。
imf是为一些设备提供支持的,如没有物理键盘的,所以有软键盘对用户体验很重要。

What is an input method?
Android的imf的设计可以满足多种要求,如软键盘,手写等。用户通常是点击输入框,然后来使用键盘的,(这里就不上图了。),EditText默认点击后会有键盘弹出的。
软键盘会在应用程序窗口的底部。为了组织屏幕的空间分配给应用程序与软键盘,Android提供了一些方法,下面使用的是pan,scan,滚动应用程序的界面,让当前的焦点可见,这也是默认的模式,它对应用程序比较安全。

多数情况下,屏幕的大小是可以重新定义大小的,在键盘弹出后,应用是高度可以缩放,不会被ime遮盖,如邮件程序就是这样的。
这需要应用有可缩放的部分,可以通过缩小一些区域来使整个应用都可见。
还有一种模式是全屏或extract,当ime太大时,比如横屏的,ime占用的空间太大,就不会显示整个应用的界面,而只是显示了一个输入框,ime覆盖在上面。

ime还有一些可定制的部分,如DONE按钮就可以自定义一些事件,来提高用户的体验。

基于xml控制ime
系统对于一个应用提供了一些可用的方法:
默认使用pan,scan模式,除非重新调整大小的模式不适合,如list,滚动的view.
分析各种textview属性来判断应该显示怎么样的布局,如只需要数字可以使用inputType(新系统支持的,好像是2.3),这样就只会出现 数字键盘了。
提供一些默认的行为,如下一个,完成按钮等。

除此之外还有一些方法:
为每一个Edittext分配输入类型
inputType,这个属性相当重要的,它可以覆盖其它的属性如android:password,android:singleLine,android:numeric。如果都分配了,系统默认使用这个值。
inputType属性有三部分:
class,是可输入的字符概述,目前支持的有普通文本,数字,电话号码,时间。
variation,是class的补充。这个属性通常与class一起用 的,带有class的前缀,如textEmailAddress是一个邮箱地址域,numberSigned是一个数字域。
flags也算是补充 ,如textCapSentences,textAutoCorrect,textMultiline
这些属性可以用|放在一起:android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"

启用一些窗口特性与大小重塑模式
除了上面的方法,退而求其次的就是分配一些窗口的属性,最多的就是resize与pan模式的区别了。
Activity的android:windowSofrInputMode属性也有一些可用值,同样可以一起使用,用|分隔的。
窗口的调整模式可以是adjustResize,或adjustPan,最好是分配一个值。
当Activity显示时,也可以自动显示键盘,默认是不会自动显示的,这时需要属性stateVisible,还有一些其它的state状态可以文档里查看。
    android:windowSoftInputMode="stateVisible|adjustResize"这样表示重新调整大小,自动弹出键盘。

控制按钮
当不在多行输入框中操作时,整个软键盘都绑定在一个事件上,如G1,enter键会次光标移动到下一个位置。
全屏模式时,ime会提供一个按钮在右侧以便可方便的操作。
这些由TextView的android:imeOptions属性控制的,也是用|连接的。
有一些定义好的行为了:actionGo,actionSearch,actionSend,actionNext,actionDone。如果这些没有分配,系统会用anctionNext,actionDone来处理的,
flagNoEnterAction选项告诉ime,enter键无效,不会响应事件,不管是不是多行的输入框,这可以避免不小心的操作。
flagNoAccessortAction将按钮从输入区移走(应该是右边的“done")。
flagNoExtractUi将文本区都移走了,允许应用在ime下面显示。
使用示例:android:imeOptions="actionSend|flagNoEnterAction"

控制ime的api
新的系统添加了一些新的api,但也可能造成旧版系统的不兼容。最低的sdk要求是3,(这也太低了吧?)
api主要在android.view.inputmethod.InputMethodManager类,可以通过Context.getSystemServices()来获取,它允许你访问全局的输入法,如显示,隐藏当前ime的输入区域。
当然也少不了一些新的flag,可以通过Window.addFlags()来处理,还有Window.setSoftInputMethod(),PopupWindow类增加了一些控制方法,如WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM常量 ,控制窗口在ime的前面。
多数的交互通过android.view.inputmethod.InputConnection类,这是一个api的应用实现,通常不需要你担心,TextView也有自己的实现。

这篇文章感觉翻译的不好,因为我对InputMethod熟悉程序不够,以后更熟悉了,再更新吧,希望有看到不对的地方可以提出意见




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics