AndroidIME與軟鍵盤簡單分析

來源:互聯網
上載者:User
AndroidIME與軟鍵盤簡單分析

原文地址:http://www.longene.org/forum/viewtopic.php?f=5&t=3935

以原始碼中/android_src/packages/inputmethod/LatinIME/為例。
我們已經知道了軟鍵盤是由IME調出的,並且彈出軟鍵盤的語句為:
代碼: 全選
InputMethodManager imm = null;
imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(vv, InputMethodManager.SHOW_FORCED);

android.view.inputmethod.InputMethodManager,你可以通過Context.getSystemService方法來擷取。它允許你和全域IME狀態進行互動,例如顯式隱藏或者顯示IME的IME地區。

在IME中,有兩種可視元素,軟鍵盤和候選字地區,即keyboard view和candiate view。
這裡著重討論的是軟鍵盤,其實後選字地區與軟鍵盤也大同小異。
當IME第一次展現的時 候,InputMethodService.onCreateInputView()就會被調用。Candidates View,是候選詞彙集合出現的地方。其可有可無,可以在調用InputMethodService.onCreateCandidatesView時返 回null,–這是它的預設行為。
InputMethodService.java在/android_src/frameworks/base/core/java/android/inputmethodservice/下:
閱讀其中的 onCreateInputView(),結果發現該函數不執行任何代碼,只返回一個null。
原來不同的IME會重寫該方法。
在latinIME中的LatinIME.java中的onCreateInputView():

代碼: 全選
195     @Override
196     public View onCreateInputView() {
197         mInputView = (LatinKeyboardView) getLayoutInflater().inflate(
198                 R.layout.input, null);
199         mKeyboardSwitcher.setInputView(mInputView);
200         mKeyboardSwitcher.makeKeyboards();
201         mInputView.setOnKeyboardActionListener(this);
202         mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);
203         return mInputView;
204     }

由以上代碼可以知道在IMEservice中對軟鍵盤進行了初始化。
在onStartInputView()函數中,傳入一個EditorInfo對象來判斷輸入的類型,並由此彈出不同類型的軟鍵盤,比如數字鍵台,全尺寸鍵盤等等。
四種不同的類型為:

代碼: 全選
TYPE_CLASS_NUMBER
TYPE_CLASS_DATETIME
TYPE_CLASS_PHONE
TYPE_CLASS_TEXT

大家有什麼見解可以一起討論討論~頁首

Re: AndroidIME與軟鍵盤簡單分析

timeboy 於 2009-10-27 14:38

mKeyboardSwitcher變數是哪裡定義的
timeboy
 
文章: 423
註冊: 2008-12-10 12:28
頁首

Re: AndroidIME與軟鍵盤簡單分析

zxbeef 於 2009-10-28 8:26

timeboy 寫道:mKeyboardSwitcher變數是哪裡定義的

mKeyboardSwitcher是該IME自己寫的類,控制輸入的模式。

zxbeef
 
文章: 577
註冊: 2009-03-04 14:33
頁首

Re: AndroidIME與軟鍵盤簡單分析

timeboy 於 2009-10-28 9:22

執行完onCreateInputView裡的程式,軟鍵盤就可以彈出來了?
timeboy
 
文章: 423
註冊: 2008-12-10 12:28
頁首

Re: AndroidIME與軟鍵盤簡單分析

zxbeef 於 2009-10-28 15:54

timeboy 寫道:執行完onCreateInputView裡的程式,軟鍵盤就可以彈出來了?

onCreateInputView()函數中:

代碼: 全選
mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);

而在KeyboardSwitcher的setKeyboardMode()函數中:

代碼: 全選
mInputView.setKeyboard(keyboard);

這樣就能顯示鍵盤了。

zxbeef
 
文章: 577
註冊: 2009-03-04 14:33
頁首

Re: AndroidIME與軟鍵盤簡單分析

timeboy 於 2009-10-29 9:53

zxbeef 寫道:

timeboy 寫道:執行完onCreateInputView裡的程式,軟鍵盤就可以彈出來了?

onCreateInputView()函數中:

代碼: 全選
mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);

而在KeyboardSwitcher的setKeyboardMode()函數中:

代碼: 全選
mInputView.setKeyboard(keyboard);

這樣就能顯示鍵盤了。

好的,還應該把android裡整體IME結構分析一下,不如,IME管理模組(不知道這個是不是一個進程),程式與管理模組和IME模組的關係

timeboy
 
文章: 423
註冊: 2008-12-10 12:28
頁首

Re: AndroidIME與軟鍵盤簡單分析

zxbeef 於 2009-10-29 10:01

timeboy 寫道:好的,還應該把android裡整體IME結構分析一下,不如,IME管理模組(不知道這個是不是一個進程),程式與管理模組和IME模組的關係

對的,不過這需要時間完整詳細的整理代碼。。。

zxbeef
 
文章: 577
註冊: 2009-03-04 14:33
頁首

Re: AndroidIME與軟鍵盤簡單分析

timeboy 於 2009-10-29 10:11

zxbeef 寫道:

timeboy 寫道:好的,還應該把android裡整體IME結構分析一下,不如,IME管理模組(不知道這個是不是一個進程),程式與管理模組和IME模組的關係

對的,不過這需要時間完整詳細的整理代碼。。。

這個是個大工程啊,要完整分析不太容易

timeboy
 
文章: 423
註冊: 2008-12-10 12:28
頁首

Re: AndroidIME與軟鍵盤簡單分析

zxbeef 於 2009-10-29 10:13

timeboy 寫道:這個是個大工程啊,要完整分析不太容易

是的,一點點分部分慢慢來。。。

zxbeef
 
文章: 577
註冊: 2009-03-04 14:33
頁首

Re: AndroidIME與軟鍵盤簡單分析

alexguitar 於 2010-04-20 20:37

請問一下有人知道如何讓預設的soft keyboard layout 縮小嗎?我在LatinIME/res/layout/input.xml修改
android:layout_width="fill_parent"
android:layout_height="wrap_content"

android:layout_width="50px"
android:layout_height="20px"

都沒反應
麻煩版上的大大幫我一下
謝謝

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.