編輯: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);
}
}
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
Android應用程序可以在許多不同地區的許多設備上運行。為了使應用程序更具交互性,應用程序應該處理以適合應用程序將要使用的語言環境方面的文字,數字,文件等。在本章中,我