Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> 通過一個SoftKeyboard例子

通過一個SoftKeyboard例子

編輯:Android開發實例

我打算用一個sdk帶的例子來理解這個IMF

SoftKeyboard例子包含如下文件:

CandidateView.java,LatinKeyboard.java,LatinKeyboardView.java,SoftKeyboard.java,當然還有與界面有關的XML,圖片等文件,這些文件我將在源碼分析時用到什麼講什麼,這樣直觀些。

我們先從一些簡單的源碼入手:LatinKeyboard.java。這個類是創建一個拉丁文鍵盤,這只是創建一個鍵盤對象,並不對具體的布局給出手段。我們來看一看他的代碼:

import android.content.Context;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.inputmethodservice.Keyboard;

從導入文件看,這個代碼用到了Context,Resources,XmlResourceParser和Keyboard,為什麼會用到三個,後面會有體現。用Keyboard自然是拉丁鍵盤繼承自該類如下:

public class LatinKeyboard extends Keyboard

那麼Keyboard有什麼特性呢:

Keyboard可以載入一個用來顯示鍵盤布局的xml來初始化自己,並且可以保存這些鍵盤的鍵的屬性。他有三個構造函數:

Keyboard(Context context, int xmlLayoutResId),用語境和xml資源id索引xml文件來創建。

Keyboard(Context context, int xmlLayoutResId, int modeId),這個和上面差不多,只不過多了一個modeld。

Keyboard(Context context, int layoutTemplateResId, CharSequence characters, int columns, int horizontalPadding),這個比較復雜,用一個空xml布局模板創建一個鍵盤,然後用指定的characters按照從左往右,從上往下的方式填滿這個模板。

本文件源碼前面完全繼承keyboard,直接用了父類初始化。

static class LatinKey extends Keyboard.Key 這裡又創建一個Key的類,繼承自Keyboard.Key.

這裡因為重寫了Keyboard類的createKeyFromXml(Resources res, Row parent, int x, int y, XmlResourceParser parser),為了要返回一個Key對象,干脆直接創建LatinKey對象好了。從這裡我們能看出面向對象和使用框架的要求。

下面再看LatinKeyboardView.java,這裡就是個View,自然也繼承自View,因為前面創建的鍵盤只是一個概念,所以需要一個view來呈現實體。這裡只重載了一個動作方法,因為LatinKey鍵盤似乎只需要知道這一個動作,於是完成了他。

protected boolean onLongPress(Key key) {
        if (key.codes[0] == Keyboard.KEYCODE_CANCEL) {

   codes是Keyboard.Key中的成員,是一個int型數組,一般來說codes[0]是當前按的值。這裡的意識如果但前是取消鍵,則調用KeyboardView被安置好的OnKeyboardActionListener對象的onKey函數發送一個KEY_OPTIONS.否則就默認使用父類的同樣函數來處理。
            getOnKeyboardActionListener().onKey(KEYCODE_OPTIONS, null);
            return true;
        } else {
            return super.onLongPress(key);
        }
    }

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved