# 输入法 输入法是 GUI 重要的组件之一,虽然实现起来并不是太复杂,但其涉及的组件比较多,理解起来还是比较困难的,这里介绍一下 AWTK 中输入法的内部架构。 ![overview](images/input_method_overview.png) ## 一、软键盘 在嵌入式系统中,通常没有物理键盘,所以需要在屏幕上实现软键盘。AWTK 中的软键盘是一个普通的窗口,其中的按钮和候选字控件,都是用 AWTK 的 UI 描述文件定义的,可以方便实现各种不同的软键盘。软键盘的描述文件放在 res/raw/ui 目录下,文件名以 kb_打头。 与普通窗口相比,软键盘有以下不同: * 被点击时不会影响原有编辑器的焦点。 * 缺省不接受按键事件(除非指定grab_keys属性为true)和输入文本事件。 为了实现方便,AWTK 中引入了一个 keyboard 的窗口类,在设计时考虑了下面几个问题: * 1. 软键盘上有多个页面。有的输入中文,有的输入大写字母,有的输入小写字母,有的输入数字,有的输入符号。 **方案:** 在软键盘中可以放多个页面,点击切按钮时进行切换。按钮的名字以"page:"开头,即意味着按下该按钮时切换到指定的页面。比如,下面的按钮被点击时就会切换到数字符号键盘: ```