InputMethodService 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。
[Android.Runtime.Register("android/inputmethodservice/InputMethodService", DoNotGenerateAcw=true)]
public class InputMethodService : Android.InputMethodServices.AbstractInputMethodService
[<Android.Runtime.Register("android/inputmethodservice/InputMethodService", DoNotGenerateAcw=true)>]
type InputMethodService = class
inherit AbstractInputMethodService
- 继承
- 属性
注解
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 有关编写输入法的基础知识的详细信息,InputMethod请参阅基类AbstractInputMethodService和接口。
除了正常的服务生命周期方法,此类还引入了一些新的特定回调,大多数子类都希望使用这些回调:
<用于用户界面初始化的 ul><li>#onInitializeInterface() ,尤其是在服务运行时处理配置更改。
<li>#onBindInput 了解如何切换到新客户端。
<li>#onStartInput 处理从客户端开始的输入会话。
<li>#onCreateInputView(), #onCreateCandidatesView()以及 #onCreateExtractTextView() 用于 UI 的非需求生成。
<li>#onStartInputView(EditorInfo, boolean) 处理输入,从 IME 的输入区域开始。
</ul>
输入法对其工作方式具有重大自由裁量权: android.inputmethodservice.InputMethodService 为标准 UI 元素(输入视图、候选视图和全屏模式运行)提供基本框架,但由特定实现者决定如何使用它们。 例如,一个输入法可以使用键盘实现输入区域,另一种输入法允许用户绘制文本,而第三个输入区域(因此对用户不可见),而是侦听音频并执行文本到语音转换。
在此处提供的实现中,所有这些元素都放在由 InputMethodService 管理的单个窗口中。 它将执行回调,因为它需要有关回调的信息,并提供 API 以编程方式控制它们。 显式定义了这些元素的布局:
<ul><li>软输入视图(如果可用)放置在屏幕底部。 <li>候选视图(如果当前显示)放置在软输入视图上方。 <li>如果未运行全屏,应用程序将被移动或调整为高于这些视图;如果运行全屏,窗口将完全覆盖应用程序,其顶部部分将包含应用程序当前正在编辑的内容的提取文本。 </ul>
“SoftInputView”><h3>软输入视图</h3>
大多数输入方法的核心是软输入视图。 这是大多数用户交互发生的地方:按软键、绘图字符,或者输入方法想要生成文本。 大多数实现只需有自己的视图即可完成所有这些工作,并在调用时 #onCreateInputView() 返回它的新实例。 此时,只要输入视图可见,你就会在该视图中看到用户交互,并可以回调 InputMethodService,以便根据需要与应用程序交互。
在某些情况下,你希望决定是否应向用户显示软输入视图。 为此,应实现 #onEvaluateInputViewShown() 返回 true 还是 false,具体取决于它是否应在当前环境中显示。 如果任何状态发生更改,可能会影响此情况,请调用 #updateInputViewShown() 重新评估它。 默认实现始终显示输入视图,除非有硬键盘可用,这是大多数输入方法的适当行为。
“CandidatesView”><h3>候选项视图</h3>
通常,当用户生成原始文本时,输入方法希望向他们提供该文本的可能解释列表,这些解释可供使用。 这是通过候选视图完成的,就像实现 #onCreateCandidatesView() 的软输入视图一样,用于实例化实现候选 UI 的自己的视图。
候选视图的管理与输入视图略有不同,因为候选视图往往更暂时性,仅当用户可能输入当前文本的候选项时才会显示。 若要控制是否显示候选视图,请使用 #setCandidatesViewShown(boolean)。 请注意,由于候选视图往往显示和隐藏很多,因此它不会影响应用程序 UI,其方式与软输入视图相同:它永远不会导致应用程序窗口调整大小,只会导致用户看到当前焦点时将其平移。
“FullscreenMode”><h3>全屏模式</h3>
有时输入法 UI 太大,无法与应用程序 UI 集成,因此你只想接管屏幕。 这是通过切换到全屏模式来实现的,导致输入法窗口填充整个屏幕,并添加其自己的“提取的文本”编辑器,向用户显示正在键入的文本。 与其他 UI 元素不同,提取编辑器有一个标准实现,不需要更改。 编辑器位于 IME 顶部,位于输入视图和候选视图上方。
与输入视图类似,你可以根据当前环境中的全屏模式实现 #onEvaluateFullscreenMode() 返回 true 还是 false 来控制 IME 是否在全屏模式下运行。 如果任何状态发生更改,可能会影响此情况,请调用 #updateFullscreenMode() 重新评估它。 当屏幕处于横向方向时,默认实现会选择全屏模式,对于具有重要输入区域的大多数输入方法而言,这是适当的行为。
当处于全屏模式时,你有一些特殊要求,因为用户看不到应用程序 UI。 具体而言,应实现 #onDisplayCompletions(CompletionInfo[]) 以显示应用程序生成的完成情况,通常在候选视图中,就像平时显示候选项一样。
“生成文本”><h3>生成文本</h3>
IME 的关键部分当然是为应用程序生成文本。 这是通过对应用程序的接口的调用 android.view.inputmethod.InputConnection 完成的,可以从中检索 #getCurrentInputConnection()。 此接口允许生成原始键事件,或者目标支持它,直接在候选字符串和已提交文本中编辑。
可以通过使用方法检索#getCurrentInputEditorInfo()的android.view.inputmethod.EditorInfo类找到目标的预期和支持的信息。 其中最重要的部分是 android.view.inputmethod.EditorInfo#inputType EditorInfo.inputType;特别是,如果是 android.view.inputmethod.EditorInfo#TYPE_NULL EditorInfo.TYPE_NULL这样,则目标不支持复杂的编辑,并且只需将原始密钥事件传递给它。 输入方法还需要在此处查看其他值,例如检测密码模式、自动完成文本视图、电话号码输入等。
当用户在输入目标之间切换时,你将收到呼叫 #onFinishInput() 和 #onStartInput(EditorInfo, boolean)。 可以使用这些设置重置和初始化当前目标的输入状态。 例如,通常需要清除任何输入状态,并更新软键盘以适合新的 inputType。
Java文档android.inputmethodservice.InputMethodService。
本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。
构造函数
| 名称 | 说明 |
|---|---|
| InputMethodService() | |
| InputMethodService(IntPtr, JniHandleOwnership) |
创建 JNI 对象的托管表示形式时使用的构造函数;由运行时调用。 |
字段
| 名称 | 说明 |
|---|---|
| AccessibilityService |
|
| AccountService |
|
| ActivityService |
|
| AdvancedProtectionService |
用于 |
| AlarmService |
|
| AppFunctionService |
用于 |
| AppOpsService |
用于 |
| AppSearchService |
|
| AppwidgetService |
|
| AudioService |
用于 |
| BatteryService |
|
| BindAllowActivityStarts |
已过时.
|
| BindExternalServiceLong |
的工作方式与 |
| BindNotPerceptible |
已过时.
|
| BindPackageIsolatedProcess |
已过时.
标志: |
| BindSharedIsolatedProcess |
已过时.
标志: |
| BiometricService |
|
| BlobStoreService |
|
| BluetoothService |
|
| BugreportService |
用于捕获 bug 报告的服务。 (继承自 Context) |
| CameraService |
|
| CaptioningService |
用于 |
| CarrierConfigService |
用于 |
| ClipboardService |
|
| CompanionDeviceService |
|
| ConnectivityDiagnosticsService |
用于 |
| ConnectivityService |
用于 |
| ConsumerIrService |
用于 |
| ContactKeysService |
|
| CredentialService |
|
| CrossProfileAppsService |
用于 |
| DeviceIdDefault |
默认设备 ID,即主设备(非虚拟)设备的 ID。 (继承自 Context) |
| DeviceIdInvalid |
设备 ID 无效。 (继承自 Context) |
| DeviceLockService |
|
| DevicePolicyService |
|
| DisplayHashService |
|
| DisplayService |
|
| DomainVerificationService |
|
| DownloadService |
与 |
| DropboxService |
|
| EuiccService |
|
| FileIntegrityService |
|
| FingerprintService |
用于 |
| GameService |
|
| GrammaticalInflectionService |
|
| HardwarePropertiesService |
用于 |
| HealthconnectService |
|
| InputMethodService |
用于 |
| InputService |
|
| IpsecService |
|
| JobSchedulerService |
|
| KeyguardService |
|
| KeystoreService |
用于 |
| LauncherAppsService |
用于 |
| LayoutInflaterService |
用于 |
| LocaleService |
|
| LocationService |
与 |
| MediaCommunicationService |
|
| MediaMetricsService |
用于 |
| MediaProjectionService |
用于 |
| MediaQualityService |
用于 |
| MediaRouterService |
|
| MediaSessionService |
用于 |
| MidiService |
用于 |
| NetworkStatsService |
用于 |
| NfcService |
|
| NotificationService |
与 |
| NsdService |
用于 |
| OverlayService |
|
| PeopleService |
|
| PerformanceHintService |
|
| PersistentDataBlockService |
|
| PowerService |
|
| PrintService |
|
| ProfilingService |
|
| ReceiverExported |
已过时.
|
| ReceiverNotExported |
已过时.
|
| ReceiverVisibleToInstantApps |
已过时.
标志: |
| RestrictionsService |
用于 |
| RoleService |
用于 |
| SatelliteService |
|
| SearchService |
|
| SecurityStateService |
|
| SensorService |
|
| ShortcutService |
|
| StatusBarService |
|
| StopForegroundDetach |
已过时.
选择器: |
| StopForegroundLegacy |
选择器: |
| StopForegroundRemove |
已过时.
选择器: |
| StorageService |
用于 |
| StorageStatsService |
|
| SystemHealthService |
|
| TelecomService |
|
| TelephonyImsService |
|
| TelephonyService |
用于 |
| TelephonySubscriptionService |
用于 |
| TetheringService |
用于 |
| TextClassificationService |
|
| TextServicesManagerService |
用于 |
| TvAdService |
|
| TvInputService |
|
| TvInteractiveAppService |
|
| UiModeService |
用于 |
| UsageStatsService |
|
| UsbService |
用于 |
| UserService |
用于 |
| VibratorManagerService |
用于 |
| VibratorService |
用于 |
| VirtualDeviceService |
用于 |
| VpnManagementService |
|
| WallpaperService |
用于 |
| WifiAwareService |
用于 |
| WifiP2pService |
用于 |
| WifiRttRangingService |
与 |
| WifiService |
用于 |
| WindowService |
|
属性
| 名称 | 说明 |
|---|---|
| Application |
返回拥有此服务的应用程序。 (继承自 Service) |
| ApplicationContext |
返回当前进程的单个全局 Application 对象的上下文。 (继承自 ContextWrapper) |
| ApplicationInfo |
返回此上下文包的完整应用程序信息。 (继承自 ContextWrapper) |
| Assets |
返回应用程序的包的 AssetManager 实例。 (继承自 ContextWrapper) |
| AttributionSource |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Context) |
| AttributionTag |
属性可用于复杂应用中,以逻辑方式分隔应用的各个部分。 (继承自 Context) |
| BackDisposition |
检索当前处置模式,该模式指示预期的后退按钮提供。 |
| BaseContext | (继承自 ContextWrapper) |
| CacheDir |
返回文件系统上特定于应用程序的缓存目录的绝对路径。 (继承自 ContextWrapper) |
| CandidatesHiddenVisibility |
如果未显示候选视图,则返回候选视图的可见性模式( |
| Class |
返回此 |
| ClassLoader |
返回可用于检索此包中的类的类加载程序。 (继承自 ContextWrapper) |
| CodeCacheDir |
返回文件系统上用于存储缓存代码的应用程序特定缓存目录的绝对路径。 (继承自 ContextWrapper) |
| ContentResolver |
返回应用程序的包的 ContentResolver 实例。 (继承自 ContextWrapper) |
| CurrentInputBinding |
返回输入方法的当前活动 InputBinding;如果没有输入法,则返回 null。 |
| CurrentInputConnection |
检索绑定到输入法的当前活动 InputConnection;如果没有,则为 null。 |
| CurrentInputEditorInfo | |
| CurrentInputStarted | |
| DataDir |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 ContextWrapper) |
| DeviceId |
获取与此上下文关联的设备 ID。 (继承自 Context) |
| Display |
获取与此上下文关联的显示。 (继承自 Context) |
| ExternalCacheDir |
返回主外部文件系统上目录的绝对路径(位于应用程序可以放置其拥有的缓存文件的某个位置 ExternalStorageDirectory )。 (继承自 ContextWrapper) |
| ExtractViewShown |
返回是否显示全屏提取视图。 |
| FilesDir |
返回存储使用 OpenFileOutput(String, FileCreationMode) 文件创建的文件系统上的目录的绝对路径。 (继承自 ContextWrapper) |
| ForegroundServiceType |
如果服务已通过调用成为前台服务
|
| Handle |
基础 Android 实例的句柄。 (继承自 Object) |
| InputMethodWindowRecommendedHeight |
旨在返回以前的输入法, |
| IsDeviceProtectedStorage |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 ContextWrapper) |
| IsFullscreenMode |
返回输入法<>当前</em> 是否在全屏模式下运行。 |
| IsInputViewShown |
返回软输入视图是否为 <em>当前</em> 向用户显示。 |
| IsRestricted |
指示此上下文是否受到限制。 (继承自 Context) |
| IsShowInputRequested |
如果系统要求显示输入视图,则返回 true。 |
| IsUiContext |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 AbstractInputMethodService) |
| JniIdentityHashCode |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
| JniPeerMembers |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 |
| KeyDispatcherState |
返回用于处理来自目标应用程序的事件的全局 |
| LayoutInflater | |
| MainExecutor |
|
| MainLooper |
返回当前进程的主线程的 Looper。 (继承自 ContextWrapper) |
| MaxWidth |
返回输入法可用的最大宽度(以像素为单位)。 |
| NoBackupFilesDir |
返回文件系统上目录的绝对路径,类似于 FilesDir. (继承自 ContextWrapper) |
| ObbDir |
返回可在其中找到此应用程序的 OBB 文件(如果有)的主外部存储目录。 (继承自 ContextWrapper) |
| OpPackageName |
返回应该用于 |
| PackageCodePath |
返回此上下文的主要 Android 包的完整路径。 (继承自 ContextWrapper) |
| PackageManager |
返回 PackageManager 实例以查找全局包信息。 (继承自 ContextWrapper) |
| PackageName |
返回此应用程序的包的名称。 (继承自 ContextWrapper) |
| PackageResourcePath |
返回此上下文的主要 Android 包的完整路径。 (继承自 ContextWrapper) |
| Params |
返回创建此上下文时所使用的参数集(如果通过该 |
| PeerReference |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
| Resources |
返回应用程序的包的资源实例。 (继承自 ContextWrapper) |
| StylusHandwritingIdleTimeoutMax |
返回用于 |
| StylusHandwritingSessionTimeout |
返回持续时间,之后未收到新 |
| StylusHandwritingWindow |
返回触笔手写墨迹书写窗口。 |
| Theme |
返回与此上下文关联的 Theme 对象。 (继承自 ContextWrapper) |
| ThresholdClass |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
| ThresholdType |
此 API 支持 Mono for Android 基础结构,不打算直接从代码使用。 |
| Wallpaper | (继承自 ContextWrapper) |
| WallpaperDesiredMinimumHeight | (继承自 ContextWrapper) |
| WallpaperDesiredMinimumWidth | (继承自 ContextWrapper) |
| Window | |
方法
显式接口实现
| 名称 | 说明 |
|---|---|
| IJavaPeerable.Disposed() |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
| IJavaPeerable.DisposeUnlessReferenced() |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
| IJavaPeerable.Finalized() |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
| IJavaPeerable.JniManagedPeerState |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 (继承自 Object) |
扩展方法
| 名称 | 说明 |
|---|---|
| GetJniTypeName(IJavaPeerable) |
获取实例 |
| JavaAs<TResult>(IJavaPeerable) |
尝试强制 |
| JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
| JavaCast<TResult>(IJavaObject) |
InputMethodService 提供 InputMethod 的标准实现,最终实现可从中派生和自定义。 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
尝试强制 |