键盘出现时隐藏元素

Posted

技术标签:

【中文标题】键盘出现时隐藏元素【英文标题】:Hide elements when keyboard shows up 【发布时间】:2016-09-21 12:17:29 【问题描述】:

如果您查看IFTTT 和Tumblr 的工作原理,您会发现当您单击登录表单输入并显示键盘时,徽标会以很酷的动画移除。

我想做类似的事情,所以我搜索了一些关于检测软键盘显示/隐藏事件的方法,但我找到的解决方案(如this 或this)都不可靠。

我怎样才能实现这种行为?

我的登录屏幕有点拥挤,所以我需要在,否则它们将不适合所有可能的屏幕配置。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。

在我的应用程序中,主屏幕上有一个用于搜索的 EditText 以及一个漂亮的大徽标。当用户按下EditText 输入搜索词时,会弹出软键盘并压缩布局,使得使用adjustResize 看起来和使用adjustPan 一样糟糕。

在对如何判断键盘何时出现进行了一些研究并阅读了 this rant from Dianne Hackborn 告诉我们当键盘出现时我们真的不应该关心之后,我决定重新考虑这一点并看看在它作为一个布局问题。只有当布局的高度低于某个阈值时,我才会遇到问题。

我为主布局创建了一个子类,并覆盖了onLayout(),当 a) 布局高度从低于阈值变为高于阈值和 b) 高度从高于阈值变为低于阈值时,它将触发回调事件。根据它采用的方式,我会启动一个动画来删除徽标或重新显示它。

我不会在这里发布该代码,因为如果我现在就发布,我会使用ViewTreeObserver.OnGlobalLayoutListener 来找出布局何时更改。它与this answer 最相似,只是我不会测试高度变化量,而是设置某个阈值并在高度超过阈值时运行适当的动画。

【讨论】:

你是对的,我以错误的方式面对问题。键盘无关紧要,重要的是布局大小。这让我大开眼界!

以上是关于键盘出现时隐藏元素的主要内容,如果未能解决你的问题,请参考以下文章

在键盘存在时隐藏“底部导航栏” - Android

js控制ios端的input/textarea元素失去焦点时隐藏键盘

当软键盘出现在phonegap中时隐藏输入字段

在应用程序加载时隐藏软键盘

屏幕键盘出现时iOS隐藏导航栏

IOS下H5的input/textarea元素失去焦点时隐藏键盘