Android输入法与软键盘简单分析

Android 软键盘控制方法、以及开发中遇到的一些问题。 本篇简述了 Android 中软键盘的控制方法,以及在开发中遇到的一些问题。 阅读详情

Android输入法与软键盘简单分析

原文地址:http://www.longene.org/forum/viewtopic.php?f=5&t=3935

以源代码中/android_src/packages/inputmethod/LatinIME/为例。
我们已经知道了软键盘是由输入法调出的,并且弹出软键盘的语句为:
代码: 全选
InputMethodManager imm = null;
imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(vv, InputMethodManager.SHOW_FORCED);


android.view.inputmethod.InputMethodManager,你可以通过Context.getSystemService方法来获取。它允许你和全局输入法状态进行交互,例如显式隐藏或者显示IME的输入法区域。

在输入法中,有两种可视元素,软键盘和候选字区域,即keyboard view和candiate view。
这里着重讨论的是软键盘,其实后选字区域与软键盘也大同小异。
当输入法第一次展现的时 候,InputMethodService.onCreateInputView()就会被调用。Candidates View,是候选词汇集合出现的地方。其可有可无,可以在调用InputMethodService.onCreateCandidatesView时返 回null,–这是它的默认行为。
InputMethodService.java在/android_src/frameworks/base/core/java/android/inputmethodservice/下:
阅读其中的 onCreateInputView(),结果发现该函数不执行任何代码,只返回一个null。
原来不同的输入法会重写该方法。
在latinIME中的LatinIME.java中的onCreateInputView():
代码: 全选
195     @Override
196     public View onCreateInputView() {
197         mInputView = (LatinKeyboardView) getLayoutInflater().inflate(
198                 R.layout.input, null);
199         mKeyboardSwitcher.setInputView(mInputView);
200         mKeyboardSwitcher.makeKeyboards();
201         mInputView.setOnKeyboardActionListener(this);
202         mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);
203         return mInputView;
204     }


由以上代码可以知道在输入法service中对软键盘进行了初始化。
在onStartInputView()函数中,传入一个EditorInfo对象来判断输入的类型,并由此弹出不同类型的软键盘,比如数字键盘,全尺寸键盘等等。
四种不同的类型为:
代码: 全选
TYPE_CLASS_NUMBER
TYPE_CLASS_DATETIME
TYPE_CLASS_PHONE
TYPE_CLASS_TEXT


:) 大家有什么见解可以一起讨论讨论~


Re: Android输入法与软键盘简单分析

帖子由 timeboy 于 2009-10-27 14:38

mKeyboardSwitcher变量是哪里定义的
timeboy
 
帖子: 423
注册: 2008-12-10 12:28

Re: Android输入法与软键盘简单分析

帖子由 zxbeef 于 2009-10-28 8:26

timeboy 写道:mKeyboardSwitcher变量是哪里定义的

mKeyboardSwitcher是该输入法自己写的类,控制输入的模式。
zxbeef
 
帖子: 577
注册: 2009-03-04 14:33

Re: Android输入法与软键盘简单分析

帖子由 timeboy 于 2009-10-28 9:22

执行完onCreateInputView里的程序,软键盘就可以弹出来了?
timeboy
 
帖子: 423
注册: 2008-12-10 12:28

Re: Android输入法与软键盘简单分析

帖子由 zxbeef 于 2009-10-28 15:54

timeboy 写道:执行完onCreateInputView里的程序,软键盘就可以弹出来了?

onCreateInputView()函数中:
代码: 全选
mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);

而在KeyboardSwitcher的setKeyboardMode()函数中:
代码: 全选
mInputView.setKeyboard(keyboard);

这样就能显示键盘了。
zxbeef
 
帖子: 577
注册: 2009-03-04 14:33

Re: Android输入法与软键盘简单分析

帖子由 timeboy 于 2009-10-29 9:53

zxbeef 写道:
timeboy 写道:执行完onCreateInputView里的程序,软键盘就可以弹出来了?

onCreateInputView()函数中:
代码: 全选
mKeyboardSwitcher.setKeyboardMode(KeyboardSwitcher.MODE_TEXT, 0);

而在KeyboardSwitcher的setKeyboardMode()函数中:
代码: 全选
mInputView.setKeyboard(keyboard);

这样就能显示键盘了。


好的,还应该把android里整体输入法结构分析一下,不如,输入法管理模块(不知道这个是不是一个进程),程序与管理模块和输入法模块的关系
timeboy
 
帖子: 423
注册: 2008-12-10 12:28

Re: Android输入法与软键盘简单分析

帖子由 zxbeef 于 2009-10-29 10:01

timeboy 写道:好的,还应该把android里整体输入法结构分析一下,不如,输入法管理模块(不知道这个是不是一个进程),程序与管理模块和输入法模块的关系

对的,不过这需要时间完整详细的整理代码。。。
zxbeef
 
帖子: 577
注册: 2009-03-04 14:33

Re: Android输入法与软键盘简单分析

帖子由 timeboy 于 2009-10-29 10:11

zxbeef 写道:
timeboy 写道:好的,还应该把android里整体输入法结构分析一下,不如,输入法管理模块(不知道这个是不是一个进程),程序与管理模块和输入法模块的关系

对的,不过这需要时间完整详细的整理代码。。。

这个是个大工程啊,要完整分析不太容易
timeboy
 
帖子: 423
注册: 2008-12-10 12:28

Re: Android输入法与软键盘简单分析

帖子由 zxbeef 于 2009-10-29 10:13

timeboy 写道:这个是个大工程啊,要完整分析不太容易

是的,一点点分部分慢慢来。。。
zxbeef
 
帖子: 577
注册: 2009-03-04 14:33

Re: Android输入法与软键盘简单分析

帖子由 alexguitar 于 2010-04-20 20:37

请问一下有人知道如何让预设的soft keyboard layout 缩小吗?我在LatinIME/res/layout/input.xml修改
android:layout_width="fill_parent"
android:layout_height="wrap_content"
为
android:layout_width="50px"
android:layout_height="20px"

都没反应
麻烦版上的大大帮我一下
谢谢
安卓软键盘监听与视图调整实战指南 安卓输入法框架由输入法管理器(InputMethodManager)和服务(InputMethodService)组成,负责管理输入法的生命周期、处理输入事件等。该框架与安卓的视图系统紧密集成,允许开发者创建能够适应不同语言和输入习惯的输入方法。是一个开源项目,旨在演示如何在安卓应用程序中监听和管理软键盘的显示与隐藏。项目通过具体的代码实现,展示了在不同安卓版本中软键盘交互的适配策略,以及如何在软键盘弹出或隐藏时进行视图调整和状态监控。 阅读详情

相关推荐

Android软键盘状态监听指南与实现

软键盘的工作机制涉及到输入焦点、布局调整和事件处理等多个方面。首先,当用户点击输入框时,系统会给该输入框设置输入焦点,激活软键盘。此时,软键盘可能会改变应用程序的界面布局,例如,将输入框提高到软键盘的上方,使得用户能够看到正在输入的内容。开发者通过编程监听软键盘的显示与隐藏状态,可以实现相应的布局调整,以确保界面元素不被软键盘遮挡,从而提高应用的整体可用性。是一个强大的工具,它允许开发者在任何布局发生变化时得到通知。这个接口属于类,而是一个可以监听整个视图树变化的工具。

weixin_30218749的博客 1194

Android AOSP输入法(LatinIME)输入流程二

一、起始: LatinIME字符输入的初始方法是LatinIME类中的onCodeInput方法: // Implementation of {@link KeyboardActionListener}. @Override public void onCodeInput(final int codePoint, final int x, final int y,

dcsff的专栏 9154

Android软键盘控制实用指南:SoftKeyBoardUtils工具类详解

在移动应用中,软键盘作为输入的主要工具,其行为对用户体验至关重要。在某些特定的业务场景下,开发者可能需要自定义软键盘的行为,以满足特定的输入需求或提升应用的专业性。本章将详细分析自定义软键盘行为的需求,并提供实现这些自定义策略的技术方案。在移动应用中,开发者常常会遇到一些特殊需求,比如在表单中实现自定义的输入格式验证、对特殊字符的处理、以及对于输入行为的特定响应。以下是几个常见的自定义软键盘行为的场景:特定输入格式的验证:例如,在用户填写电话号码或信用卡信息时,需要验证输入是否符合格式要求。

weixin_34620658的博客 910

Android软键盘上移动焦点&&Android TV定制输入法

下面这个分析是基于安卓 5.0的 ,7.0的目前正在研究。 在Android Latin输入法的基础上进行改写,该输入法不支持中文,处理流程如图: 第一次启动输入法服务时,根据键盘布局文件创建软键盘view,分别是全字母软键盘、数字软键盘以及特殊字符软键盘。在创建软键盘时,把每一个软键盘上的所有按键放到一个HashMap中,使每一个按键都分别与一个String型的数字对应。

wed110的专栏 5272

KeyboardMode-crx插件

语言:Deutsch,English 此扩展程序使您可以打开与键盘的链接。 通过此扩展程序,您可以使用键盘控制Chrome。 有了alreay知道的热键,按下某个可调的热键后,就已经可以控制chrome的大部分内容(例如,输入新的URL,返回,前进),此扩展名会在显示以下字符时显示链接提示(请参见屏幕截图)。按下链接提示,将打开相关链接。 使用“元”键可以在新标签页,新窗口或新的隐身窗口中打开某些链接。

掌控板玩板指南1:初识掌控板、扩展板、Mind+编辑器

掌控板、I/O扩展板入门

好乐无荒之地 1万+

LatinIME输入法增加不同国家字符键盘

keyboard_layout_set_xxxx.xml 后缀要接定义的brazil字段,需要制作自己需要的键盘布局就可以了。3.创建对应的键盘布局文件keyboard_layout_set_brazil.xml。2.attrs.xml文件supportedScript枚举项添加对应的支持。4.在ScriptUtils.java文件也需要增加相应的字段,不然会报错。要创建什么语言的键盘就查找对应的缩写词,这里以巴西为例。1.打开method.xml。

qq_42481796的博客 972

手把手教你如何修改YOLO11的模型结构(以CBAM和可变性卷积为例)

YOLO11修改模型结构

2401_86807530的博客 1万+

LatinIME输入法分析

<br /><br />输入法的设置在res/xml/method.xml的<input-method>标签中,主要设置两个属性:<br />android:settingsActivity,输入法的设置程序入口。<br />android:isDefault,这个输入法是不是系统的默认输入法。<br /> <br />另外,如果输入法的apk直接push到/system/app/下面的话,算是系统输入法,如果是以第三方程序的方式安装到/data/app/下面的话,算是第三方输入法,两个输入法目前来看,最大

农场老马的专栏 2万+

车载以太网SOMEIP入门必看:从服务发现到事件订阅,一次搞懂三种核心通信模式(附报文实例)

本文深入解析车载以太网SOME/IP的三种核心通信模式:服务发现、方法调用和事件订阅,通过真实报文实例和仿真工具演示,帮助开发者快速掌握这一关键技术。文章特别强调服务发现机制的基础作用,并详细介绍了Request/Response与Fire&Forget两种方法调用模式的应用场景,为智能汽车网络通信开发提供实用指南。

weixin_30955617的博客 111

ubuntu20.04下dsp-slam的运行配置

DSP-SLAM:具有深度形状先验的面向对象的 SLAM

baidu_38431960的博客 3158

Android 修改系统默认拉丁输入法为拼音

修改\mediatek\config\project_name\ProjectConfig.mk # Whether or not the Pinyin IME applicationwill be included in the system. MTK_INPUTMETHOD_PINYINIME_APP=yes//开启拼音宏开关 # Add these variables to def

Mr_kings的专栏 890

【FPGA教程案例87】加解密1——基于FPGA的AES加解密算法verilog实现

DES已走到了它生命的尽头。56比特密钥实在太小,虽然三重DES可以解决密钥长度的问题,但是DES的设计主要针对硬件实现,而今在许多领域,需要用软件方法来实现它,在这种情况下,它的效率相对较低。1997年4月15日美国国家标准和技术研究所(NIST)发起征集AES(Advanced Encryption Standard)算法的活动,并成立了AES工作组。目的是为了确定一个非保密的、公开披露的、全球免费使用的加密算法,用于保护下一世纪政府的敏感信息。这里,我们对AES的基本原理进行介绍:

FPGA/MATLAB学习教程/源码/项目合作开发 2545

安卓应用开发学习:解决退出输入法软键盘后,页面被遮挡的区域不显示的问题

这篇日志记录了作者在安卓应用开发中遇到的一个怪异问题及解决过程。在将单页应用升级为多页应用(使用ViewPager2和Fragment)后,发现软键盘关闭后界面部分区域被遮挡的问题。作者在DeepSeek的帮助下尝试了多个解决方案,最终通过修改AndroidManifest.xml文件中的windowSoftInputMode属性为"adjustPan|stateHidden"成功解决了问题。整个过程展示了开发中遇到技术难题时的排查思路和解决方法。

bahamutj的博客 1134

MIKE水动力笔记5_建立水动力模型

前文已经讲了如何制作网格文件(.mdf文件),这一博文就讲如何建立水动力模型。

晏长街的博客 3万+

【unity游戏开发入门到精通——通用篇】Post Processing 后处理插件Post-process Volume 和 Volume最全基础使用说明

之前我已经实现了不少后处理功能,本文其实就是将他们归类整理,以便更好的查找和理解。在Unity中,后处理(Post-Processing)是在相机所捕捉的图像上应用一些特殊效果的过程,后处理会让图像视觉效果更好(前提是做的好)。这些效果的范围有非常细微的颜色调整,也包括整体的美术风格的大修,可以让场景看起来更加真实或风格化,或者只是变得更好看。就像我们都会用手机拍照,但很多时候我们拍的原始的相片都打不到我们想要的效果。比如照片可能亮度不够,颜色不饱和或者对比度不好等。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 7894

Flutter 学习之旅 之 flutter 有时候部分手机【TextField】无法唤起【输入法软键盘】的一些简单整理

Flutter 是一款开源的 UI 软件开发工具包,由 Google 开发和维护。它允许开发者使用一套代码同时构建跨平台的应用程序,包括移动设备(iOS 和 Android)、Web 和桌面平台(Windows、macOS 和 Linux)。Flutter 使用 Dart 编程语言,它可以将代码编译为 ARM 或 Intel 机器代码以及 JavaScript,从而实现快速的性能。

仙魁XAN 1731

药物对接仿真软件:HADDOCK_(5).HADDOCK中蛋白质-配体对接流程

半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。如果是PDB格式,确保文件包含所有必要的原子信息。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。

kkchenjj的博客 1078

Android软键盘windowSoftInputMode的使用与原理(使用篇)

看了网上很多文章都没有很准确的说明windowSoftInputMode的几种模式的作用,而且大部分文章只是分析了一下如何使用并没有深入源码去分析原理,今天这篇文章就来分析一下Android软键盘windowSoftInputMode的各个模式的作用和原理,文章一共分为两篇,一是使用篇,二是原理篇,下面开始使用篇的讲解。如上,windowSoftInputMode有六个stateXXX的值和三个adjustXXX的值。

一只特立独行的猪 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【android开发】输入法弹出参数(windowSoftInputMode)分析

在开发过程中,有时候我们会控制输入弹出对视觉(Activity)的效果。这时候不可避免的会在AndroidManifest中对windowSoftInputMode进行设置形如:android:windowSoftInputMode="state...|adjust.."或者使用下面的代码动态设置:WindowManager.LayoutParams params = activity.getWin

蓝亭书序 1563

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Android软键盘windowSoftInputMode的使用与原理(原理篇)

上一篇文章介绍了windowSoftInputMode各个属性的具体作用,下面我们在源码层面来分析一下各个属性的实现原理(基于Android9)。

一只特立独行的猪 6197

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

开发安卓系统Android和码输入法软件的全过程(二)

2012年01月20日星期五 Android IMF给输入软件的编写给出的规范,也提供了很多的方便。这里从例子程序SoftKeyboard来认识。 1、软键盘界面的设计,可以用XML文件来做,这真是很方便。 android.inputmethodservice.Keyboard Class能把XML键盘文件,转换成视图。 android.inputmethodservice.Keyboa

HeChinese的专栏 1781

android输入法01:SoftKeyboard源码解析01

本文主要介绍android自带输入法实例SoftKeyboard的源码,共分为两篇:第一篇为SoftKeyboard框架概述,第二篇为源码注释。 1、IMF简介        一个IMF结构中包含三个主要的部分: input method manager:管理各部分的交互。它是一个客户端API,存在于各个应用程序的context中,用来沟通管理所有进程间交互的全局系统服务。input m

2938

android输入法窗口大小,Android_光标&&window如何因为输入法而重新计算大小

本文讨论以下几个方面的问题以及解决办法1,Edittext,获取焦点但是禁止软键盘的弹出,2,光标的产生原理3,activity是如何在输入法弹出后调整窗口大小的1.Edittext,获取焦点但是禁止软键盘的弹出Android api21 放开了TextView的setShowSoftInputOnFocus方法可以设置在获取焦点的时候不显示软键盘,但是在Android api21以下该方法是隐藏...

weixin_33507732的博客 889

Android开发之输入法详解

输入法的例子和源代码看了不少时间了,看得头很晕,很郁闷。静下心来把整个代码想了一遍,其实大部分代码都在处理绘制界面,以及事件的处理,核心代码很少,都被底层封装得很完美了。 先看看一般输入法的界面:分为两个部分,上部分是候选窗口(CandidateView),用来显示候选词,现在常用的输入法都有这个功能,如在搜狗、google输入法中输入abc,输入框中就会显示很多相关联的中文词。下部分就是软键盘了

XuxuTao 6031
上一篇: Android调试工具及方法
下一篇: android 输入法 框架
androidboy365
博客等级 码龄16年 35粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值