語言

InputMethodManager 類別

定義

整體輸入法框架(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
繼承
InputMethodManager
屬性

備註

整體輸入法框架(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
已淘汰.

標記表示預設主畫面Intent#CATEGORY_HOME的視圖()可作為代理編輯者視圖的手寫委派。

ShowForced

標記 for #showSoftInput 表示使用者已強制開啟輸入法(例如長按選單),因此在明確關閉前不應關閉。

ShowImplicit

標記 for #showSoftInput 表示這是隱含請求顯示輸入視窗,而非使用者直接請求的結果。

屬性

名稱 Description
Class

回傳此 Object的執行時類別。

(繼承來源 Object)
CurrentInputMethodInfo

回傳 InputMethodInfo 目前選擇的輸入法(針對程序使用者)。

CurrentInputMethodSubtype

回傳目前的輸入法子型別。

EnabledInputMethodList

回傳啟用的輸入方法清單。

Handle

底層 Android 實例的帳號。

(繼承來源 Object)
InputMethodList

回傳已安裝的輸入方法清單。

IsAcceptingText

如果目前提供的檢視接受全文編輯,請返回 true

IsActive

如果輸入法目前有任何檢視正在進行,請回傳 true

IsConnectionlessStylusHandwritingAvailable

如果目前選擇的 IME 支援無連線觸控筆手寫會話且已啟用,則回傳 true

IsFullscreenMode

讓你能發現附加的輸入法是否以全螢幕模式運行。

IsInputMethodSuppressingSpellChecker

如果輸入法是抑制系統拼字檢查器,則回傳 true

IsStylusHandwritingAvailable

如果目前選擇 IME,則 Return true ,支援觸控筆手寫並已啟用。

JniIdentityHashCode

取得由互通執行時指派給此 Java 對等端的身份雜湊碼。

(繼承來源 Object)
JniManagedPeerState

整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。

(繼承來源 JavaObject)
JniPeerMembers

整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。

LastInputMethodSubtype

回傳系統歷史上最後一次使用的 InputMethodSubtype 車輛。

PeerReference

取得這個 Java 節點的 JNI 物件參考。

(繼承來源 Object)
ShortcutInputMethodsAndSubtypes

回傳所有快捷鍵輸入法資訊及其子類型的映射。

ThresholdClass

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

(繼承來源 Object)
ThresholdType

此 API 支援 Mono for Android 基礎架構,並非直接從你的程式碼中使用。

(繼承來源 Object)

方法

名稱 Description
AcceptStylusHandwritingDelegation(View, String, HandwritingDelegateFlag, IExecutor, IConsumer)

若先前曾向委派器請求 #prepareStylusHandwritingDelegation(View, String) 手寫啟動委派,且視圖屬於指定的代理套件,則會接受並啟動手寫會話。

AcceptStylusHandwritingDelegation(View, String, IExecutor, IConsumer)

若先前曾向委派器請求 #prepareStylusHandwritingDelegation(View, String) 手寫啟動委派,且視圖屬於指定的代理套件,則會接受並啟動手寫會話。

AcceptStylusHandwritingDelegation(View, String)

若先前曾向委派器請求 #prepareStylusHandwritingDelegation(View, String) 手寫啟動委派,且視圖屬於指定的代理套件,則會接受並啟動手寫會話。

AcceptStylusHandwritingDelegation(View)

接受並啟動筆寫會話,若先前曾向 #prepareStylusHandwritingDelegation(View) 委派者請求手寫啟動委派,則會在委派視圖上啟動。

Clone()

建立並回傳此物件的副本。

(繼承來源 Object)
Construct(JniObjectReference, JniObjectReferenceOptions)

整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。

(繼承來源 JavaObject)
DispatchKeyEventFromInputMethod(View, KeyEvent)

提供預設實作 InputConnection#sendKeyEvent(KeyEvent),預期會根據給定 View 及當前焦點狀態,將從 IME 發送的鍵盤事件派遣至適當的事件目標。

DisplayCompletions(View, CompletionInfo[])
Dispose()

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
Dispose(Boolean)

釋放該 Java 節點所持有的資源。

(繼承來源 Object)
DisposeUnlessReferenced()

整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。

(繼承來源 JavaObject)
Equals(Object)

整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。

(繼承來源 JavaObject)
Equals(Object)

表示是否有其他物體「等同」於此物。

(繼承來源 Object)
FromContext(Context)

整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。

GetEnabledInputMethodSubtypeList(InputMethodInfo, Boolean)

回傳指定輸入法資訊的啟用輸入法子類型清單。

GetHashCode()

回傳物件的雜湊碼值。

(繼承來源 Object)
GetImeHideAnimationDurationOverrideMillis(View)

IME 會以毫秒回傳給定視圖樹的隱藏動畫持續時間覆寫。

GetImeShowAnimationDurationOverrideMillis(View)

以毫秒回傳給定視圖樹的 show 動畫持續時間覆蓋。

HideSoftInputFromInputMethod(IBinder, HideSoftInputFlags)

關閉或隱藏輸入方法的軟輸入區域,讓使用者無法再看到或互動。

HideSoftInputFromWindow(IBinder, HideSoftInputFlags, ResultReceiver)

請求將軟輸入視窗隱藏在目前接受輸入的視窗上下文中。

HideSoftInputFromWindow(IBinder, HideSoftInputFlags)

請求將軟輸入視窗隱藏在目前接受輸入的視窗上下文中。

HideStatusIcon(IBinder)

此會員已被棄用。

InvalidateInput(View)

向系統提示所關聯 view 的文字是由非輸入法編輯器(IME)更新的,因此系統可取消來自 IME 的任何待處理文字編輯請求,直到收到新的編輯上下文(如由 InputConnection#takeSnapshot()提供)提供的周圍文字。

InvokeIsActive(View)

如果給定的視圖是輸入法目前的啟用視圖,則回傳 true

IsWatchingCursor(View)
已淘汰.

如果目前輸入法想在視窗中監控輸入編輯器游標的位置,則回傳 true。

JavaFinalize()
已淘汰.

當垃圾回收判定該物件不再有相關參考時,由垃圾回收器呼叫。

(繼承來源 Object)
Notify()

喚醒一個正在該物件監視器上等待的執行緒。

(繼承來源 Object)
NotifyAll()

喚醒所有等待該物件監視器的執行緒。

(繼承來源 Object)
PrepareStylusHandwritingDelegation(View, String)

準備將啟動觸控筆手寫工作階段委派給不同編輯器,該編輯器在同一或不同視窗中,與初始筆劃被偵測到的視圖不同。

PrepareStylusHandwritingDelegation(View)

準備將啟動觸控筆手寫工作階段委託給與初始筆劃檢視相同或不同視窗的編輯器。

RestartInput(View)

如果輸入法目前連接到該檢視圖,請以新內容重新啟動該檢視法。

SendAppPrivateCommand(View, String, Bundle)

呼叫 InputMethodSession#appPrivateCommand(String, Bundle) InputMethodSession.appPrivateCommand() 目前的輸入法。

SetAdditionalInputMethodSubtypes(String, InputMethodSubtype[])

設定額外的輸入法子類型。

SetCurrentInputMethodSubtype(InputMethodSubtype)

切換到現有輸入法的新子類型。

SetExplicitlyEnabledInputMethodSubtypes(String, Int32[])

更新呼叫程序擁有的明確啟用 InputMethodSubtype 清單。

SetHandle(IntPtr, JniHandleOwnership)

設定 Handle 屬性。

(繼承來源 Object)
SetImeHideAnimationDurationOverrideMillis(View, Int64)

設定或清除 IME 隱藏動畫持續時間的覆寫。

SetImeShowAnimationDurationOverrideMillis(View, Int64)

設定或清除 IME 顯示動畫持續時間的覆蓋。

SetInputMethod(IBinder, String)

強制切換到新的輸入法元件。

SetInputMethodAndSubtype(IBinder, String, InputMethodSubtype)

強制切換到新的輸入法和子類型。

SetPeerReference(JniObjectReference, JniObjectReferenceOptions)

整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。

(繼承來源 JavaObject)
ShouldOfferSwitchingToNextInputMethod(IBinder)

如果目前的 IME 需要提供使用者切換到下一個輸入法的方法(例如

ShowInputMethodAndSubtypeEnabler(String)

顯示啟用指定輸入法子類型的設定。

ShowInputMethodPicker()

以我經驗,顯示選擇器彈出視窗。

ShowSoftInput(View, ShowFlags, ResultReceiver)

如有需要,明確要求顯示目前輸入方法的軟輸入區域給使用者。

ShowSoftInput(View, ShowFlags)

如有需要,明確要求顯示目前輸入方法的軟輸入區域給使用者。

ShowSoftInputFromInputMethod(IBinder, ShowFlags)

顯示輸入法的軟輸入區域,讓使用者能看到輸入法視窗並互動。

ShowStatusIcon(IBinder, String, Int32)

此會員已被棄用。

StartConnectionlessStylusHandwriting(View, CursorAnchorInfo, IExecutor, IConnectionlessHandwritingCallback)

啟動無連接觸控筆手寫會。

StartConnectionlessStylusHandwritingForDelegation(View, CursorAnchorInfo, IExecutor, IConnectionlessHandwritingCallback)

啟動無連接觸控筆手寫會話(參見 #startConnectionlessStylusHandwriting),並允許識別的手寫文字後續透過文字 #acceptStylusHandwritingDelegation(View)編輯器提交。

StartConnectionlessStylusHandwritingForDelegation(View, CursorAnchorInfo, String, IExecutor, IConnectionlessHandwritingCallback)

啟動無連接觸控筆手寫會話(參見 #startConnectionlessStylusHandwriting),並允許識別的手寫文字後續透過文字 #acceptStylusHandwritingDelegation(View, String)編輯器提交。

StartStylusHandwriting(View)

開始用觸控筆手寫。

SwitchToLastInputMethod(IBinder)

強制切換到最後使用的輸入法和子類型。

SwitchToNextInputMethod(IBinder, Boolean)

強制切換到下一個輸入方式和子類型。

ToArray<T>()

從這個 Java 陣列包裝器建立一個受管理陣列。

(繼承來源 Object)
ToggleSoftInput(ShowFlags, HideSoftInputFlags)

此方法切換輸入法視窗顯示。

ToggleSoftInputFromWindow(IBinder, ShowSoftInputFlags, HideSoftInputFlags)

此方法切換輸入法視窗顯示。

ToString()

傳回物件的字串表示。

(繼承來源 Object)
UnregisterFromRuntime()

將此 Java 節點從互通執行時中取消註冊。

(繼承來源 Object)
UpdateCursor(View, Int32, Int32, Int32, Int32)
已淘汰.

在視窗中回報目前游標的位置。

UpdateCursorAnchorInfo(View, CursorAnchorInfo)

報告合成字串中文字插入點和/或字元的位置變化。

UpdateExtractedText(View, Int32, ExtractedText)
UpdateSelection(View, Int32, Int32, Int32, Int32)

回報目前的選擇範圍。

ViewClicked(View)

當使用者點擊或點擊文字檢視時,會通知事件。

Wait()

讓目前線程等候直到喚醒為止,通常是藉由em <notified/em>或<em>interrupted</em> 來喚醒它。<>

(繼承來源 Object)
Wait(Int64, Int32)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 Object)
Wait(Int64)

讓目前的線程等到喚醒為止,通常是因為 <em>notified</em> 或 <em>interrupted</em>,或直到經過一定數量的實時為止。

(繼承來源 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)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

整體輸入法框架(IMF)架構的中央系統 API,負責仲裁應用程式與現有輸入法之間的互動。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於