Android项目:输入法软键盘显示

在项目开发中,用到编辑框的地方经常涉及到要监听或者控制软键盘的显示/隐藏状态。本以为这是很容易解决的一个小问题,没想到当初碰到这个问题才明白还得花点小心思才能整好。现将针对软键盘的显示/隐藏状态的监听/监控方法做一些总结,以备后用。



 

这是具有编辑框焦点的页面对输入法软键盘状态监听的一般需求和解决方法.

首先获得InputMethodManager:

 先说下自己想实现的效果:点击顶部按钮,打开编辑菜单popwindow并自动弹出软键盘;再次点击顶部按钮,或者点击编辑菜单popwindow上面的底部按钮,关闭菜单并隐藏软键盘;菜单打开状态,点击返回键,若菜单已显示先关闭软键盘,再点击则关闭菜单。

对于这个需求,简单的用上面第一点的方法是无效的。这里没法直接通过getCurrentFocus()方法判断页面是否获取焦点来控制,需要通过对popwindow的高度变化进行判断。同时也试过下面的方法,同样无效。

通过对编辑窗口的根布局高度变化来判断软键盘是否处于显示状态,在接口方法OnResizeRelative(int w, int h, int oldw, int oldh)里实现对高度变化的判断。这里主要判断以下几种高度变化场景:


(1)布局的当前高度小于上一次的高度,即h < oldh,因为布局被软键盘顶上去了,高度变小了。这种场景同样适用于点击按钮第一次打开窗口时的场景,虽然点击按钮时,肉眼看到的是窗口一下就充满了大半个屏幕,也就是当前h > oldh(oldh = 0)。但事实上是,第一次打开窗口时,窗口菜单首先是充满整个屏幕然后再根据软键盘高度自动缩进的。以下是点击【打开/发送】按钮后,根布局的高度变化日志:

(2)还有一种特殊情况,就是三星输入法在软键盘初次打开时,输入字符后软键盘高度会产生变化,同时造成根布局高度变小;若再清除已输入的字符,此时软键盘高度变小,根布局高度变大。而这两种情况下,也就是h < oldh 或者 h > oldh时,软键盘都是处于显示状态。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值