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

news2024/12/26 21:32:00

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

  • 1、IME屏幕之间切换
  • 2、属性配置
  • 3、屏幕之间切换 IME 窗口

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


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 客户端将获得合适的配置(其中包含正确的屏幕指标)来重新初始化输入视图。
      在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/515782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Android】试着写一个资讯界面(含不同板块)

跟着视频做的,并不能动脑子,于是自己顺一遍流程!(只阅读了部分教程,代码不完全相同)(仅为静态界面不含跳转)(在fragment上)此为视频链接 成果图: …

07-HTML-链接标签

<a> 标签定义超链接&#xff0c;用于从一张页面链接到另一张页面。<a> 元素最重要的属性是 href 属性&#xff0c;它指示链接的目标。 属性值描述downloadfilename规定被下载的超链接目标。hrefURL规定链接指向的页面的 URL。pinglist_of_URLs规定以空格分隔的 UR…

YOLOv8 人体姿态估计(关键点检测) python推理 ONNX RUNTIME C++部署

目录 1、下载权重 ​2、python 推理 3、转ONNX格式 4、ONNX RUNTIME C 部署 1、下载权重 我这里之前在做实例分割的时候&#xff0c;项目已经下载到本地&#xff0c;环境也安装好了&#xff0c;只需要下载pose的权重就可以 2、python 推理 yolo taskpose modepredict model…

ESP32设备驱动-PCA9685 LED控制器驱动

PCA9685 LED控制器驱动 文章目录 PCA9685 LED控制器驱动1、PCA9685介绍2、硬件准备3、软件准备4、驱动实现1、PCA9685介绍 PCA9685 是一款 IC 总线控制的 16 通道 LED 控制器,针对红色/绿色/蓝色/琥珀色 (RGBA) 彩色背光应用进行了优化。 每个 LED 输出都有自己的 12 位分辨率…

scala中match使用报错Scala.matchError:(of class java.lang.String)

1.遇到错误 Scala.matchError:(of class java.lang.String) 2.发现问题出在match使用中,如下写法就会报错 val partitionIndex key.toString match {case "chinese" > 0case "math" > 1case "english" > 2} 3.后来修改了写法&#xf…

【大数据学习篇3】HDFS命令操作与MR单词统计

1. HDFS命令使用 [rootmaster bin]# su hd[hdmaster bin]$ #查看/目录[hdmaster bin]$ hdfs dfs -ls / 5 #在/目录创建一个为test名字的文件夹[hdmaster bin]$ hdfs dfs -mkdir /test#查看/目录[hdmaster bin]$ hdfs dfs -ls Found 1 itemsdrwxr-xr-x - hd supergroup …

【rust】| 04——语法基础 | 函数

系列文章目录 【rust】| 00——开发环境搭建 【rust】| 01——编译并运行第一个rust程序 【rust】| 02——语法基础_变量(不可变?)和常量 【rust】| 03——语法基础 | 数据类型 【rust】| 04——语法基础 | 函数 【rust】| 05——语法基础 | 流程控制 文章目录 函数1. 定义函数…

Lecture 15:元学习Meta Learning

目录 Review Machine Learning Introduction of Meta Learning What is Meta Learning? Meta Learning的三个步骤 Meta Learning的framework&#xff1a; ML v.s. Meta Meta Learning的training What is learnable in a learning algorithm? 初始化参数θ0 Optimiz…

用 Phthon 写抽奖程序

一共 10 人参与抽奖&#xff0c;四人中奖&#xff0c;其中一人固定不变。 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&#xff1a…

windows 打包 inno setup

1.下载并安装 inno setup 官网下载地址 点击下载并安装inno setup 软件,安装完成后点打开软件 在上图中点击 cancel 回到inno setup 的主界面 ①在主界面点击File -> New 然后在向导界面点击 next 填写安装信息点击next 如下图 点击next e 选择exe的位置, add folder …

实战打靶集锦-019-BTRSys2.1

提示&#xff1a;本文记录了博主的一次普通的打靶经历 目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 FTP服务探查4.2 Apache服务探查4.2.1 wpscan扫描4.2.2 Metasploit神器4.2.3 手工探查页面4.2.3.1 Appearance Editor4.2.3.2 Plugins Editor 5. 提权5.1 系统信息枚…

KVM存储池管理与磁盘格式

KVM存储池管理与磁盘格式 KVM必须配置一个目录作为存储磁盘镜像&#xff08;存储卷&#xff09;的目录&#xff0c;我们称这个目录为存储池 存储池管理 默认存储池 /var/lib/libvirt/images/ 创建基于文件夹的存储池&#xff08;目录&#xff09; mkdir -p /data/vmfs定义…

详解MySQL覆盖索引、索引下推

目录 1.覆盖索引 1.1.概述 1.2.聚集索引、非聚集索引 1.3.回表查询 1.4.覆盖索引 2.索引下推 1.覆盖索引 1.1.概述 覆盖索引&#xff0c;是为了避免“回表查询”&#xff0c;从而降低查询耗时的一种使用索引的方法&#xff0c;所以要聊覆盖索引首先我们要知道什么是&qu…

HTB-Busqueda

HTB-Busqueda 信息收集80端口 svcsvc -> root 信息收集 80端口 将ip和searcher.htb添加至/etc/hosts文件。 功能能就是你输入一个值&#xff0c;选择好搜索引擎后点击search&#xff0c;就会生成一个选择的搜索引擎里搜索你输入的值的链接。比如输入aster。 如果勾选了自动…

Github配置SSH密钥连接(附相关问题解决)

Github配置SSH密钥连接&#xff08;附相关问题解决&#xff09; 引言 当前&#xff0c;通过Git在本地仓库和远程仓库&#xff08;如Github&#xff09;之间进行操作&#xff0c;已不再支持密码验证&#xff0c;而是转为通过更安全的SSH密钥验证方式。 因此&#xff0c;本文将…

正态分布线性计算的方差推导(含协方差推导)

推导如下&#xff1a; 由于方差是每个数据与均值离差平方和的均值&#xff1a;即对Σ&#xff08;每个数据-均值&#xff09;再求一次均值&#x1f447;&#xfeff;&#xfeff; 最终Var(X) E(X&#xff09;-E&#xff08;X) 因此&#x1f447; Var(X-Y) E(X-Y)-E(X-Y) …

mysql的主从复制和读写分离

1.mysql主从复制和读写分离的相关知识 1.1 什么是读写分离? 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作( INSERT、UPDATE、DELETE) &#xff0c;而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 …

一个用于Allen脑图谱基因数据的工具箱|abagen

艾伦人类脑图谱&#xff08;Allen Human Brain Atlas&#xff09; 艾伦人类脑图谱是一个由艾伦脑科学研究所(Allen Institute for Brain Science)开发的在线基因表达图谱数据库&#xff0c;旨在提供人类大脑各个区域的细胞类型和基因表达信息。这个数据库包含了人类全基因组微…

【C语言】通讯录(文件版)

前言 前面我们完成了通讯录的静态版本和动态版本&#xff0c;虽然功能已经比较完善了&#xff0c;但是前面的通讯录缺少了存储联系人的能力&#xff0c;所以我们学习了文件的操作管理&#xff0c;这里我们就用上一篇文章的知识来完成这次的文章吧。 关于通讯录的前两篇文章我放…

Lecture 15:元学习Meta Learning2

目录 Meta Learning – MAML MAML Reptile Meta Learning – Gradient Descent as LSTM Meta Learning – Metric-based Meta Learning - TrainTest as RNN Meta Learning – MAML Meta Learning&#xff1a;让机器自动找出learning algorithm Meta Learning的三个步骤&…