InputMethodManager 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。
[Android.Runtime.Register("android/view/inputmethod/InputMethodManager", DoNotGenerateAcw=true)]
public sealed class InputMethodManager : Java.Lang.Object
[<Android.Runtime.Register("android/view/inputmethod/InputMethodManager", DoNotGenerateAcw=true)>]
type InputMethodManager = class
inherit Object
- 繼承
- 屬性
備註
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。
這裡涵蓋的主題有: <ol><li>架構概述<li>應用<li>輸入法<li>security</ol>
「架構概述」><h3>架構概述</h3>
輸入法框架(IMF)架構主要涉及三個方面:
<ul><li><強輸入>法管理者</強> 者(strong in the manager)是系統中管理所有其他部分互動的核心點。 此處以用戶端 API 形式表達,存在於每個應用情境中,並與管理所有流程互動的全域系統服務通訊。 <li> 強 <輸入>法(IME)</強輸入> 法實作特定的互動模型,讓使用者能夠產生文字。 系統會綁定目前使用的輸入法,導致該輸入法被建立並執行,並告訴它何時隱藏並顯示其 UI。 同時只有一個 IME 正在進行。 <li> 多重 <強客戶>端應用程式</強力> 仲裁輸入法管理器,以聚焦輸入並控制 IME 狀態。 同時只有一位此類客戶(與 IME 合作)處於活躍狀態。 </ul>
「應用程式」><h3>應用程式</h3>
在大多數情況下,使用標準 android.widget.TextView 或其子類別的應用程式,幾乎不需要做太多操作就能與軟輸入法良好運作。 你需要注意的主要事項包括:
<ul><li> 請妥善設定 android.R.attr#inputType 在可編輯的文字檢視中,讓輸入法有足夠的上下文幫助使用者輸入文字。
<
>當輸入法顯示時,能很好地處理畫面空間的損失。 理想情況下,應用程式應該處理視窗縮小大小,但若需要,系統可自行執行視窗平移。 你應該在你建立的視窗上設定 android.R.attr#windowSoftInputMode 活動屬性或相應值,幫助系統判斷是要平移還是調整大小(它會嘗試自動判斷,但可能會錯)。
<LI> 你也可以用同 android.R.attr#windowSoftInputMode 一個屬性來控制視窗的軟輸入狀態(開啟、關閉等)。
</ul>
透過這裡的 API 可以直接與 IMF 及其 IME 互動,提供更細緻的控制——無論是顯示或隱藏輸入區域、讓使用者選擇輸入方法等等。
對於少數自己撰寫文字編輯器的人,你需要實作 android.view.View#onCreateInputConnection 回傳一個新的介面實例 InputConnection ,讓 IME 能與你的編輯器互動。
「輸入方法」><h3>輸入方法</h3>
輸入法(IME)實作為 android.app.Service,通常由 衍生。android.inputmethodservice.InputMethodService 它必須提供核心 InputMethod 介面,但這通常由 android.inputmethodservice.InputMethodService 該部門處理,實作者只需處理較高階的 API。
請參閱課程以 android.inputmethodservice.InputMethodService 了解如何實施 IME 的更多資訊。
「安全」><h3>安全/<h3>
輸入方式有很多安全問題,因為它們基本上可以完全控制使用者介面,監控使用者輸入的一切。 Android 輸入法框架也允許任意第三方 IME,因此必須謹慎限制其選擇與互動。
以下是關於國際貨幣基金組織背後安全架構的一些重點:
<烏爾><·李>
只有系統被允許透過權限直接存取 IME 的 InputMethod 介面 android.Manifest.permission#BIND_INPUT_METHOD 。 系統中透過不綁定不需要此權限的輸入法服務來強制執行此限制,因此系統能保證沒有其他不受信任的用戶端在其控制之外存取目前的輸入法。
<李>
IMF 可能有多個客戶程序,但同時只能有一個啟動。 非活躍用戶端無法透過以下機制與 IMF 的關鍵部分互動。
<李>
輸入法的用戶端僅能存取其 InputMethodSession 介面。 每個用戶端會建立一個此介面的實例,目前的 IME 只會處理與該活躍用戶端關聯的會話通話。 這在一般 IME 中會強制執行 android.inputmethodservice.AbstractInputMethodService ,但必須由自訂原始 InputMethodSession 實作的 IME 明確處理。
<李>
只有現役客戶 InputConnection 會接受手術。 IMF 會告訴每個用戶端程序是否為活動,框架則強制忽略非活動程序對當前 InputConnection 的呼叫。 這確保目前的 IME 只能將使用者視為焦點的事件與文字編輯到 UI 上。
<李>
IME 在螢幕關閉時無法與 AI InputConnection 互動。 這透過在螢幕關閉時讓所有用戶端都處於非活動狀態來強制執行,並防止不良的 IME 在使用者無法察覺其行為時驅動 UI。
<李>
用戶端應用程式可以要求系統讓使用者選擇新的 IME,但無法自行程式切換到新的 IME。 這可避免惡意應用程式將使用者切換到自己的 IME,該 IME 在使用者移動到其他應用程式時仍持續執行。 另一方面,<IME><> 允許透過程式方式切換系統到另一個 IME,因為它已經完全控制使用者輸入。
<李>
使用者必須在設定中明確啟用新的 IME,才能切換到該系統,以確認他們知道該資訊並希望開放使用。
</ul>
如果你的應用程式目標是 Android 11(API 等級 30 或更高),這個類別中的方法都會回傳一個依照套件可見性規則過濾過的結果,除了目前連接的 IME。 應用程式有查詢「 InputMethod#SERVICE_INTERFACE 查看所有 IME」。
Java 文件 android.view.inputmethod.InputMethodManager。
本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。
欄位
| 名稱 | Description |
|---|---|
| HandwritingDelegateFlagHomeDelegatorAllowed |
已淘汰.
標記表示預設主畫面 |
| ShowForced |
標記 for |
| ShowImplicit |
標記 for |
屬性
| 名稱 | Description |
|---|---|
| Class |
回傳此 |
| CurrentInputMethodInfo |
回傳 |
| CurrentInputMethodSubtype |
回傳目前的輸入法子型別。 |
| EnabledInputMethodList |
回傳啟用的輸入方法清單。 |
| Handle |
底層 Android 實例的帳號。 (繼承來源 Object) |
| InputMethodList |
回傳已安裝的輸入方法清單。 |
| IsAcceptingText |
如果目前提供的檢視接受全文編輯,請返回 |
| IsActive |
如果輸入法目前有任何檢視正在進行,請回傳 |
| IsConnectionlessStylusHandwritingAvailable |
如果目前選擇的 IME 支援無連線觸控筆手寫會話且已啟用,則回傳 |
| IsFullscreenMode |
讓你能發現附加的輸入法是否以全螢幕模式運行。 |
| IsInputMethodSuppressingSpellChecker |
如果輸入法是抑制系統拼字檢查器,則回傳 |
| IsStylusHandwritingAvailable |
如果目前選擇 IME,則 Return |
| JniIdentityHashCode |
取得由互通執行時指派給此 Java 對等端的身份雜湊碼。 (繼承來源 Object) |
| JniManagedPeerState |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 (繼承來源 JavaObject) |
| JniPeerMembers |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 |
| LastInputMethodSubtype |
回傳系統歷史上最後一次使用的 |
| PeerReference |
取得這個 Java 節點的 JNI 物件參考。 (繼承來源 Object) |
| ShortcutInputMethodsAndSubtypes |
回傳所有快捷鍵輸入法資訊及其子類型的映射。 |
| ThresholdClass |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 Object) |
| ThresholdType |
此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。 (繼承來源 Object) |
方法
明確介面實作
| 名稱 | Description |
|---|---|
| IJavaPeerable.Disposed() |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 (繼承來源 JavaObject) |
| IJavaPeerable.Finalized() |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 (繼承來源 JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 (繼承來源 JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 (繼承來源 JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 (繼承來源 JavaObject) |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |