當前位置:首頁 » 安卓系統 » android輸入法源碼

android輸入法源碼

發布時間: 2022-05-12 12:33:19

① android輸入法源碼中沒有定義popupwindow但是運行時點擊key會出現popupwindow窗口。如何除去

KeyboardView keyboardView.setPreviewEnabled(false);

② 怎樣增加Android輸入法鍵盤語言

有一種辦法是從goldfish或者其它Gapps包或者從Google Play獲取Google Pinyin IME 它也可算作第一方輸入法,因為其源碼應該和PinyinIME項目同源,且由Google編譯出品 如果還不行,則需要自行下載完整AOSP,打上CM補丁後,自行編譯加入了PinyinIME項目的CM,當然也可選擇不打CM補丁而使用AOSP

③ 如何就一種新的輸入法固化到android源碼中,求高手指教比如加入阿拉伯語鍵盤輸入。

最起碼也要留個谷歌自帶輸入法的啊,其他輸入法不安全,會收集你的帳號密碼之類的隱私數據的哦!!要固化輸入法的話,就必須事先ROOT也就是破解手機,然後用文件管理器進入SYSTEAM\APP目錄下粘貼復制新的輸入法安裝即可!!

④ 編寫一種android平台上的 輸入法

參考開源的輸入法程序:
http://code.google.com/p/aedict/
這個是個日語輸入法
初步學習:-1個月
1.去電驢上下一份mars的視頻。先淺淺的了解下android應用開發、整體架構和思路。mars的視頻做的挺不錯。
2.在eclipse中導入api demos。在手機/模擬器上運行apidemos,裡面的實例非常棒。可以把例子中涉及到項目的地方標注下,然後著重看看這部分的代碼.
逐漸深入:-3個月
1.有選擇的閱讀android api中的Dev Guide部分。
2.閱讀android中的resources部分。
上面的文章比較多,也不需要全部閱讀。只是在做過初步工作後,有選擇性的著重看一些相關內容。相關內容應該不僅僅包括項目直接相關的,還包括一些平台基礎知識。這些東西應如何選擇是在初步學習階段中應該明確的。
3.有空上上android相關比較好的社區,看看高手總結。如eoe、bus之類的。
准備階段:-3個月
閱讀開源的項目。
樓下有的朋友也提了一些建議。我覺得都挺好的,到了這個時候就該開始閱讀源碼進行學習了。
這里的關鍵在於慢慢扣源碼,先找容易看到的類。看著注釋慢慢理解,碰到不熟悉的類就查android的api。
閱讀是個長期的過程,然後必須要產生一些成果:
a.與輸入法相關的關鍵介面有哪些?關鍵類有哪些,職責是什麼?
b.輸入法的架構是怎樣的?組件之間如何交互?
c.數據從哪裡來?如何進行組織?
3.開發階段:
迭代開發。從最小的原型開始做起。
最小原型包括:最基本的輸入法功能,輸入字母,確定輸入,顯示字典,選擇完成輸入。最基礎的測試數據。
在完善輸入法基本功能上迭代開發。包括聯想輸入,更智能的分詞,以及符號和手寫識別等。還有ui美化等等。
既然你這邊有學c的同學,那麼在一些關鍵瓶頸方面。也可以使用NDK做後續優化。

⑤ Android4.0 EidtText不彈出輸入法

看一個manifest中Activity的配置,如果這個頁面有EditText,並且我們想要進入這個頁面的時候默認彈出輸入法,可以這樣設置 這個屬相:android:windowSoftInputMode=stateVisible,這樣就會默認彈起輸入法,當然還有別的辦法。


java"><activityandroid:name=".ui.login"
android:configChanges="orientation|keyboardHidden|locale"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateVisible|adjustPan">
</activity>

Android EditText 不彈出輸入法總結

方法一:

在AndroidMainfest.xml中選擇哪個activity,設置windowSoftInputMode屬性為 adjustUnspecified|stateHidden

例如:

<activityandroid:name=".Main"
android:label="@string/app_name"
android:windowSoftInputMode="adjustUnspecified|stateHidden"
android:configChanges="orientation|keyboardHidden">
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>

方法二:

讓EditText失去焦點,使用EditText的clearFocus方法

例如:

EditTextedit=(EditText)findViewById(R.id.edit);
edit.clearFocus();

方法三:

強制隱藏Android輸入法窗口

例如:

EditTextedit=(EditText)findViewById(R.id.edit);
InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(),0);

2.EditText始終不彈出軟體鍵盤

例:

EditTextedit=(EditText)findViewById(R.id.edit);
edit.setInputType(InputType.TYPE_NULL);

研究了下android中焦點Focus和彈出輸入法的問題。在網上看了些例子都不夠全面,在這里全面總結下。

一:EditText為什麼會默認彈出輸入法?

同樣的代碼,碰到有EditText控制項的界面時有的機子會彈出輸入法,有的機子不會彈出。不好意思,這問題我也一頭霧水,誰知道可以告訴我,否則 我就把這個問題留下來,以後研究android 源碼時再搞個清楚。但是...我有解決方案。

二:默認彈出和默認關閉輸入法的解決方案。

1.默認關閉,不至於進入Activity就打開輸入法,影響界面美觀。

①在布局文件中,在EditText前面放置一個看不到的LinearLayout,讓他率先獲取焦點:

<LinearLayout
android:focusable="true"
android:focusableInTouchMode="true"
android:layout_width="0px"
android:layout_height="0px"/>

②方法二:先看一個屬性android:inputType:指定輸入法的類型,int類型,可以用|選擇多個。取值可以參 考:android.text.InputType類。取值包括:text,textUri,

phone,number,等.

Android SDK中有這么一句話「If the given content type is TYPE_NULL then a soft keyboard will not be displayed for this text view」,

先將EditText的InputType改變為TYPE_NULL,輸入法就不會彈出.然後再設置監聽,再重新設置它的InputType.


editText.setOnTouchListener(newOnTouchListener(){
publicbooleanonTouch(Viewv,MotionEventevent){
//TODOAuto-generatedmethodstub
intinType=editText.getInputType();//backuptheinputtype
editText.setInputType(InputType.TYPE_NULL);//disablesoftinput
editText.onTouchEvent(event);//callnativehandler
editText.setInputType(inType);//restoreinputtype
returntrue;
}
});

2.默認彈出。有時候按照需求可能要求默認彈出輸入法。方案如下:


EditTexttitleInput=(EditText)findViewById(R.id.create_edit_title);
titleInput.setFocusable(true);
titleInput.requestFocus();
onFocusChange(titleInput.isFocused());
privatevoidonFocusChange(booleanhasFocus)
{
finalbooleanisFocus=hasFocus;
(newHandler()).postDelayed(newRunnable(){
publicvoidrun(){
InputMethodManagerimm=(InputMethodManager)
titleInput.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if(isFocus)
{
imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
}
else
{
imm.hideSoftInputFromWindow(titleInput.getWindowToken(),0);
}
}
},100);
}

我覺得因為在Android的主線程中對UI的操作無效,所以必須在Handler中實現彈出輸入法的操作。

三:關於焦點和輸入法的個人理解

獲取焦點是獲取焦點,彈輸入法是彈輸入法。獲取焦點後並不一定會彈出輸入法,在網上搜了一圈,主流回答是「還有就是已開啟界面就是focus的 text的話有可能也是不行的,UI渲染是需要時間的」......

由於對源碼不懂,我對這一點也沒有個全面的認識。只能將焦點和輸入法分成兩塊來處理。焦點的打開和關閉特別簡單。

焦點的獲取:

titleInput.setFocusable(true);
titleInput.requestFocus();

焦點的取消:

titleInput.setFocusable(false);

四:關於經常調用的處理軟鍵盤的函數如下:

1、打開輸入法窗口:

=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);

//接受軟鍵盤輸入的編輯文本或其它視圖

imm.showSoftInput(submitBt,InputMethodManager.SHOW_FORCED);

2、關閉出入法窗口


=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(OpeListActivity.this.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);

//接受軟鍵盤輸入的編輯文本或其它視圖

inputMethodManagerwww.2cto.com
.showSoftInput(submitBt,InputMethodManager.SHOW_FORCED);

3、如果輸入法打開則關閉,如果沒打開則打開

InputMethodManagerm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
m.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);

4、獲取輸入法打開的狀態

InputMethodManagerimm=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
booleanisOpen=imm.isActive();

isOpen若返回true,則表示輸入法打開

⑥ 怎樣增加Android輸入法鍵盤語言

有一種辦法是從goldfish或者其它Gapps包或者從Google Play獲取Google Pinyin IME
它也可算作第一方輸入法,因為其源碼應該和PinyinIME項目同源,且由Google編譯出品
如果還不行,則需要自行下載完整AOSP,打上CM補丁後,自行編譯加入了PinyinIME項目的CM,當然也可選擇不打CM補丁而使用AOSP

⑦ MTK平台如何修改默認輸入法

如何修改默認輸入法?

一、適用於ICS(AndroidV4.0)之前的版本:

1.安裝需要用的默認輸入法(.apk)到system/app

2.修改文件frameworks/base/packages/SettingsProvider/res/values/defaults.xml

<string name="default_input_method" translatable="false">默認輸入法 ID
</string>
紅色標記表示輸入法 ID, 比如 PinyinIME 為: com.android.inputmethod.pinyin/.PinyinIME

二、適用於ICS、JB、JB2、KK的版本:

1.需要提前將用到的默認輸入法(.apk)內置到系統中( 請參考如何將APK預置進系統)

2.修改文件mediatek/config/${Project}/ProjectConfig.mk

將宏DEFAULT_INPUT_METHOD的值設置為所需的輸入法;

比如PinyinIME, 則設為:
DEFAULT_INPUT_METHOD=com.android.inputmethod.pinyin.PinyinIME
這個值是輸入法源碼中,包含InputMethodService子類的那個包名.實現InputMethodService的子類的類名。這里比log中列印的完整類名少一個"/",請注意

補充說明:

KK的版本不需要一下修改:

上面的修改方法只適用於默認輸入法為com.android.inputmethod.pinyin/.PinyinIME這種格式的輸入
法(即反斜杠後面就是類名的情況),對於com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME (即反斜杠後面是完整類名的情況),這種情況是不支持修改mediatek/config/${Project}/ProjectConfig.mk裡面DEFAULT_INPUT_METHOD的方法來設置默認輸入法的。

以com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME 為例

請改用下面的方法修改,在SettingsProvider 的DatabaseHelper.java中


Log.i(TAG, "defaultIME : " + defaultIME);
if (defaultIME != null) {
StringBuffer strBuffer = new StringBuffer(defaultIME);
int lastDotPos = defaultIME.lastIndexOf(".");
String strInsert = "/";
strBuffer.insert(lastDotPos, strInsert);
loadSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
strBuffer.toString());
} else {
Log.i(TAG, "default IME from IMEFeatureOption is null!!");
}

請將默認的初始化部分code刪除, 即將 下面的code都刪除掉。

Log.i(TAG, "defaultIME : " + defaultIME);
if (defaultIME != null) {
StringBuffer strBuffer = new StringBuffer(defaultIME);
int lastDotPos = defaultIME.lastIndexOf(".");
String strInsert = "/";
strBuffer.insert(lastDotPos, strInsert);
loadSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
strBuffer.toString());
} else {
Log.i(TAG, "default IME from IMEFeatureOption is null!!");
}

然後在刪除的後面添加

loadSetting(stmt, Settings.Secure.DEFAULT_INPUT_METHOD,
"com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME");//這里修改默認選中的輸入法

三、適用於L, M的版本

請在APK正確預置的前提下,再修改如下:

在InputMethodManagerService的systemRunning()函數, if (!mImeSelectedOnBoot) 的分支中修改如下

if (!mImeSelectedOnBoot) {
Slog.w(TAG, "Reset the default IME as \"Resource\" is ready here.");
// String preInstalledImeName = SystemProperties.get("ro.mtk_default_ime");
String preInstalledImeName = "第三方輸入法的完整包名ID";

或者直接修改build.prog中的ro.mtk_default_ime屬性值,也可在system.prog中增加此屬性值。只要修改完後, adb shell getprop ro.mtk_default_ime能獲取到正確的預置輸入法ID即可。

MTK平台如何修改默認輸入法如果按照如上的步驟沒有修改成功,請參考如下步驟進行檢查修改:

(1)檢查是否成功預置輸入法:FAQ13232

(2)檢查下setting-- language&input 界面,該輸入法前面的勾是否選上,沒有選上說明此輸入法沒有被enable,請參考FAQ08909來enable;

(3)檢查是否發生語言切換,如果有切換則會恢復默認輸入法,若不想因語言變化導致恢復,請參考FAQ12213,FAQ06663

(4)修改默認輸入法FAQ04327
這個解決方法是在闖客技術論壇轉的,如果解決不了你可以去提問。

⑧ android輸入法定製

網路一下多文輸入法就是做定製的,可以先申請試用不用花錢。做為一個合格的合答達人,我應該給你提供多個選擇才對,所以我想了想、查了查,你還可以選擇:開源的輸入法有源碼,可以自行diy。下載源碼的地方有很多,可以網路出來,我怕被網路過濾所以我沒有把BBS的名字寫出來。網路一下就有了。希望這樣的回答你會喜歡 ^_^

⑨ android輸入法開發,最開始編寫的時候必須要寫的有什麼內容

參考開源的輸入法程序:
這個是個日語輸入法

初步學習:-1個月
1.去電驢上下一份mars的視頻。先淺淺的了解下android應用開發、整體架構和思路。mars的視頻做的挺不錯。
2.在eclipse中導入api demos。在手機/模擬器上運行apidemos,裡面的實例非常棒。可以把例子中涉及到項目的地方標注下,然後著重看看這部分的代碼.
逐漸深入:-3個月
1.有選擇的閱讀android api中的Dev Guide部分。
2.閱讀android中的resources部分。
上面的文章比較多,也不需要全部閱讀。只是在做過初步工作後,有選擇性的著重看一些相關內容。相關內容應該不僅僅包括項目直接相關的,還包括一些平台基礎知識。這些東西應如何選擇是在初步學習階段中應該明確的。
3.有空上上android相關比較好的社區,看看高手總結。如eoe、bus之類的。
准備階段:-3個月
閱讀開源的項目。
樓下有的朋友也提了一些建議。我覺得都挺好的,到了這個時候就該開始閱讀源碼進行學習了。
這里的關鍵在於慢慢扣源碼,先找容易看到的類。看著注釋慢慢理解,碰到不熟悉的類就查android的api。
閱讀是個長期的過程,然後必須要產生一些成果:
a.與輸入法相關的關鍵介面有哪些?關鍵類有哪些,職責是什麼?
b.輸入法的架構是怎樣的?組件之間如何交互?
c.數據從哪裡來?如何進行組織?
3.開發階段:
迭代開發。從最小的原型開始做起。
最小原型包括:最基本的輸入法功能,輸入字母,確定輸入,顯示字典,選擇完成輸入。最基礎的測試數據。
在完善輸入法基本功能上迭代開發。包括聯想輸入,更智能的分詞,以及符號和手寫識別等。還有ui美化等等。
既然你這邊有學c的同學,那麼在一些關鍵瓶頸方面。也可以使用NDK做後續優化。

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:887
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:580
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:683
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1012
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:254
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:112
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:803
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:712