键盘出现时隐藏元素
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 最相似,只是我不会测试高度变化量,而是设置某个阈值并在高度超过阈值时运行适当的动画。
【讨论】:
你是对的,我以错误的方式面对问题。键盘无关紧要,重要的是布局大小。这让我大开眼界!以上是关于键盘出现时隐藏元素的主要内容,如果未能解决你的问题,请参考以下文章