Android输入法不使用多客户端多屏适配-Android12

文章详细阐述了Android12系统中输入法引擎(IME)如何处理屏幕之间的切换,包括IME的屏幕切换逻辑、属性配置以及窗口在不同屏幕间的适配过程。系统通过InputMethodManagerService管理IME,并依据config_perDisplayFocusEnabled等配置决定是否在每个显示器上启用焦点。当应用在非默认屏幕获取焦点时,IME会调整布局以适应新屏幕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android输入法不使用多客户端多屏适配-Android12

在非默认屏幕上运行的应用


1、IME屏幕之间切换

系统使用一个 IME,但可以在屏幕之间切换,以跟踪用户焦点。Android 10 默认所有第一方和第三方 IME 在创建时都会根据新屏幕的尺寸调整布局和大小。

如果屏幕 A 上有一个活动连接,并且屏幕 B 上的输入字段请求获得输入焦点,则会触发以下流程:

  • 屏幕 B 上的输入字段发出一个新的输入连接。
  • InputMethodManagerService 检查是否应该批准该连接。
  • 系统为该 IME 选择一个屏幕。如果屏幕 B 支持且允许显示 IME,则使用屏幕 B。否则,将选择设备的主屏幕。
  • 如果所选屏幕并非来自屏幕 A,则重新建立连接。系统会销毁 InputMethodService,然后重新创建它。

实现如下
在这里插入图片描述

  • DisplayWindowSettings#shouldShowImeLocked()
  • DisplayWindowSettings#setShouldShowImeLocked()

Android12上没有:(Android12查看/frameworks/base/services/core/java/com/android/server/wm/DisplayWindowSettingsProvider.java

2、属性配置

  • com.android.internal.R.bool.config_perDisplayFocusEnabled:系统是否启用每个显示器的焦点。如果系统具有每个显示器的输入法,则此值应为config_perDisplayFocusEnabled=true。
    /frameworks/base/core/res/res/values/config.xml
    在这里插入图片描述
  • persist.debug.multi_client_ime \ ro.sys.multi_client_ime属性不需要设置
  • 配置显示display_settings.xml文件,DisplayWindowSettingsProvider#readSettings()读取文件配置
    private static final String DATA_DISPLAY_SETTINGS_FILE_PATH = "system/display_settings.xml";
    private static final String VENDOR_DISPLAY_SETTINGS_FILE_PATH = "etc/display_settings.xml";

3、屏幕之间切换 IME 窗口

  • 在 IMMS 端,当通过 ViewRootImpl#handleWindowFocusChanged -> InputMethodManager#onPostWindowFocus -> IMMS#startInputOrWindowGainedFocus 收到来自外部屏幕的应用客户端焦点请求时,它会先取消绑定当前的输入法服务,然后再重新绑定该服务,以在 onServiceConnected() 中重新附加针对该外部屏幕的新 IME 窗口令牌。
    在这里插入图片描述

  • 在 IMS 端,收到 IMS#attachToken 后,将触发以下流程:

    • 调用 ContextImpl#updateDisplay,以在 InputMethodService#attachToken() 中更新服务上下文的屏幕。这会调用 ViewGroup#addView() 来调整键盘布局并适应检查当前上下文的目标屏幕。
    • 调用 DisplayContent#setInputMethodWindowLocked() 之后,该实现使用 WindowProcessController 将进程级屏幕配置更改发送给 IME 进程,以替换资源和屏幕指标。
    • 调用 onConfigurationChanged() 和 ViewGroup#addView() 之后,InputMethodService 客户端将获得合适的配置(其中包含正确的屏幕指标)来重新初始化输入视图。
      在这里插入图片描述
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhBruce

佛系随缘,共同探讨

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值