android 1.5 新特色之一就是輸入法框架(input method framework,imf),正是它的出現,才為誕生不帶實體鍵盤的裝置提供了可能。imf設計用來支援不同的ime,包括了soft keyboard,hand-writing recognizes和hard keyboard translators。這裡,我們把焦點鎖定在soft keyboard上。
新特色對普通應用開發者而言,應該確保讓應用能夠和imf很好的配合,提供優秀的使用者體驗。應用要做的最重要事情,就是對每個edittext使用 新的屬性android:inputtype,這個屬性實際代替了很多已經存在的屬性,包括android:password, android:singleline, android:numeric, android:phonenumber, android:capitalize, android:autotext, android:editable。如果你兩個都宣告了,cupcake裝置就會使用新的android:inputtype屬性,而忽視其他的。
主要的api就是android.view.inputmethod.inputmethodmanager,你可以通過context.getsystemservice方法來獲取。它允許你和全域性輸入法狀態進行互動,例如顯式隱藏或者顯示ime的輸入法區域。
新特色對於系統開發人員而言,其提供了開發各種各樣語言輸入法的實現入口,有了它,其他語言輸入法才能進駐android。以下內容即關注如何實現乙個輸入法。
要建立乙個輸入法,需要繼承android.inputmethodservice.inputmethodservice。這個類提供了輸入法的 基本實現,包括狀態管理、控制輸入法可見,還有和當前activity通訊。android提供了兩個輸入法和乙個示例,這兩個輸入法分別是 pinyinime和latinime輸入法,你可以在原始碼packages/inputmethods下找到,示例即softkeyboard,可以在 sdk 1.5下的platforms/android-1.5/samples下找到。這三個輸入法提供了目前實現android平台輸入法實現的最佳參考。
輸入法的打包方式和其他應用是相同的,在androidmanifest.xml中,要把輸入法宣告為service,並附帶上合適的intent filter和相關的meta data。如下所示:
android:name=".demoime"
android:label="@string/ime_name"
android:permission="android.permission.bind_input_method"
>
>
android:name="android.view.inputmethod"
/>
>
android:name="android.view.im"
android:resource="@xml/method"
/>
>
如果輸入法允許使用者調整設定,那麼你還應該提供乙個setting activity。這個時候不要忘記在input-method的xml檔案中,加入相關的屬性,如以下所示(這個檔案就是剛才meta-data中的@xml/method):
xmlns:android=""
android:settingsactivity="com.demo.settingsactivity"
android:isdefault="@bool/im_is_default"
/>
輸入法在ui展現上,有兩個主要的可見元素,input view和candiate view。但這不是必需的,可以根據實際需要選擇你需要的元素。input view,是使用者從鍵盤、手寫或者其他方式輸入文字的地方。當輸入法第一次展現的時 候,inputmethodservice.oncreateinputview()就會被呼叫。candidates view,是候選詞彙集合出現的地方。其可有可無,可以在呼叫inputmethodservice.oncreatecandidatesview時返 回null,–這是它的預設行為。
應用的文字區可以有不同的輸入型別,包括文字、數值、url、郵箱位址和搜尋,因此在你實現新的輸入法時,需要當心不同的輸入型別。輸入法並不會自 動切換不同的輸入型別,所以你要在ime中支援所有的型別。不過可以輕鬆一點的是, ime並不負責輸入內容的校驗,—因為這是應用的職責。
要把文字傳送給應用有兩種方式,你可以傳送單一的按鍵事件,也可以在應用的文字框內編輯游標附近的文字。傳送按鍵事件,可以簡單構造 keyevent物件,並且呼叫inputconnection.sendkeyevent(),或者更加方便一點,使用 inputmethodservice.senddownupkeyevents(keyeventcode)。在編輯文字框 時,android.view.inputmethod.inputconnection有一些很有用的方法,例如 gettextbeforecursor()等等。
Android輸入法教程
本帖最後由 yanghe123 於 2012 4 28 15 51 編輯 android輸入法教程 輸入法框架 android輸入法框梳理 在android中建立一種新的輸入法 android 呼叫輸入法 android輸入法手勢程式原始碼 android輸入法開發例項 android 輸入法的問題...
Android 隱藏輸入法
對於edittext 可以設定setinputtype inputtype.type null 輸入法就不會彈出。需要的時候在動態設定inputtyep.如果一載入activity 可以用getwindow setsoftinputmode windowmanager.layoutparams.so...
Android 輸入法詳解
oncreateinputview 建立鍵盤區檢視 避免輸入法變成全屏 設定後為 false後 如何再onstartinputview切換對應的布局 edittext 的 android inputtype 來 如何切換輸入法不同的鍵盤?在android 電視上的 搜狗tv輸入法,就沒有處理密碼相關...