日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android 自定义输入法布局,Android 输入法详解

發布時間:2023/12/10 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 自定义输入法布局,Android 输入法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們自己要重寫一個簡單的輸入法確實很簡單,但是要寫一個輸出中文或者五筆等等就比較麻煩。因為你需要引擎,建議使用別人的引擎先進行改造。這篇文章著重是在輸入法UI層面上進行講解,不涉及引擎問題,引擎問題可以查看源碼或者網上自行查找學習(或者下一篇文章會推出).

note: 本文章有一些內容是涉及TV端的,本程序猿是一枚android TV開發人員.

1. 了解輸入法整體的窗口布局.

手機 搜狗輸入法 截圖:

TV端 搜狗輸入法 截圖:

TV端主要是遙控器操作(上,下,左,右,確定),鼠標也是支持的。

輸入法的布局分為兩部分,上面為 候選框,下面為 鍵盤區域.

2. 簡單了解下谷歌的輸入法

谷歌的輸入法是按照MVC模式來寫的,輸入法的界面 原理很簡單,讀取XML布局,繪制鍵盤區域.

PinyinIME 為谷歌的拼音輸入法。

LatinIME 是外文輸入法,包含了很多外國的語言。

如果有源碼,可以自己看看谷歌的PinyinIME的res\xml 目錄下的 xml文件.

然后也可以看看

XmlKeyboardLoader.java 文件 是如何加載并解析XML文件的.

SoftKeyboardView.java 文件是根據解析的XML文件繪制出 鍵盤區域的.

谷歌PinyinIME源碼地址:http://git.oschina.net/kumei/PinyinIME_GOOGLE (可以編譯的版本)

3. 如何寫一個簡單的輸入法

谷歌有一套輸入法框架,也提供了編寫輸入法的API,請記住這個類(InputMethodService.java).

InputMethodService 是輸入法的關鍵核心類.

插入一個小插曲,本人以前是搞LINUX桌面開發的,那個時候linux桌面的輸入法真的很難用.

Linux的輸入法框架有很多,有 SCIM, ibus, Fcitx,大家可以簡單的了解下.

后來?搜狗 與 fcitx 合作開發,才有了 搜狗 for linux,真心表示很贊.

關鍵核心類有幾個重要的函數:

onCreateCandidatesView 創建 候選框區域視圖,一般是返回一個layout布局.

onCreateInputView 創建 鍵盤區域視圖,也是一般返回一個layout布局.

看看在 AndroidManifest.xml要如何寫.

android:name="com.....自定義InputMethodService"

android:label="@string/app_name"

android:permission="android.permission.BIND_INPUT_METHOD" >

android:name="android.view.im"

android:resource="@xml/method" />

注意 android:permission 與 action(android.view.InputMethod),還有 meta-data。

android:permission="android.permission.BIND_INPUT_METHOD"

綁定輸入法,請求InputMethodService服務,只有系統才能使用。(網上給出的解釋)

而且還是一個你作為輸入法的標識.

action(android.view.InputMethod)

meta-data

再看看 xml 的 method.xml

android:isDefault="true"

android:settingsActivity="com.....setting.自定義SettingsActivity" />

android:settingsActivity 不用多說,就是 輸入法設置界面.

input-method 支持很多語法,有興趣的可以上網查查.

經過上面幾個步驟,基本上一個超級簡單的輸入法就出來了.

給 鍵盤區域 返回 一個簡單的 layout布局(帶幾個button就OK)

也許你的輸入法雛形已經出來了,你會帶著好幾個疑問與好奇?

1. 輸入法 的 文字 如何 輸入 到 EditText 的? (看下面的代碼)

/**

* 發送字符到編輯框(EditText)

*/

public void commitResultText(String resultText) {

InputConnection ic = getCurrentInputConnection();

if (null != ic && !TextUtils.isEmpty(resultText)) {

ic.commitText(resultText, 1);

}

}

2. 是如何根據 EditText 的 一些參數進行設置的?

android:inputType 來 如何切換輸入法不同的鍵盤?

在?InputMethodService 有一個函數?onStartInputView,這個函數

android:imeOptions 來顯示 下一步,完成,搜索 等等?

android:imeActionLabel 如何顯示文字在輸入法的完成鍵上的?

3. 輸入法是如何不占據全屏的?

InputMethodService 的函數

@Override

public boolean onEvaluateFullscreenMode() {

return false;

}

4. 輸入法是如何使用引擎(中文,五筆等等)的?

5. 輸入法上是如何向EditText刪除文字的?

6. 輸入法是如何向EditText移動光標的?

why ? 移動光標?這種需求主要是面向TV端的,如何做的,我只能粗暴的貼代碼了.

本來想了幾種方式,后來在WPS這種多行文本一測試,很多移動光標的方式都有問題,最后只剩下這種方式最穩妥.

/**

* 輸入框的光標向右移動.

*/

public void setCursorRightMove() {

int cursorPos = getSelectionStart();

cursorPos++;

getCurrentInputConnection().setSelection(cursorPos, cursorPos);

}

/**

* 輸入框的光標向左移動.

*/

public void setCursorLeftMove() {

int cursorPos = getSelectionStart();

cursorPos--;

if (cursorPos < 0)

cursorPos = 0;

getCurrentInputConnection().setSelection(cursorPos, cursorPos);

}

7. 輸入法如何發送按鍵給EditText?

8. 如何編寫與自定義 自己 輸入法的XML?

9. 如何繪制漂亮的輸入法界面?

10.如何發送表情

后續繼續完善,還沒有寫完 .. ... (先休息羅... ...)

我的開源項目:

http://git.oschina.net/kumei/OpenInputMethod 一個英文輸入法demo,高仿TV端搜狗輸入法界面.

http://git.oschina.net/kumei/zhuyin_inputmethod 一個臺灣注音輸入法,使用的網上的開源注音引擎.

總結

以上是生活随笔為你收集整理的android 自定义输入法布局,Android 输入法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。