【发布时间】:2016-09-21 12:17:29
【问题描述】:
如果您查看IFTTT 和Tumblr 的工作原理,您会发现当您单击登录表单输入并显示键盘时,徽标会以很酷的动画移除。
我想做类似的事情,所以我搜索了一些关于检测软键盘显示/隐藏事件的方法,但我找到的解决方案(如this 或this)都不可靠。
我怎样才能实现这种行为?
我的登录屏幕有点拥挤,所以我需要在键盘出现时隐藏元素,否则它们将不适合所有可能的屏幕配置。
【问题讨论】:
标签: android
如果您查看IFTTT 和Tumblr 的工作原理,您会发现当您单击登录表单输入并显示键盘时,徽标会以很酷的动画移除。
我想做类似的事情,所以我搜索了一些关于检测软键盘显示/隐藏事件的方法,但我找到的解决方案(如this 或this)都不可靠。
我怎样才能实现这种行为?
我的登录屏幕有点拥挤,所以我需要在键盘出现时隐藏元素,否则它们将不适合所有可能的屏幕配置。
【问题讨论】:
标签: android
我遇到了同样的问题。
在我的应用程序中,主屏幕上有一个用于搜索的 EditText 以及一个漂亮的大徽标。当用户按下EditText 输入搜索词时,会弹出软键盘并压缩布局,使得使用adjustResize 看起来和使用adjustPan 一样糟糕。
在对如何判断键盘何时出现进行了一些研究并阅读了 this rant from Dianne Hackborn 告诉我们当键盘出现时我们真的不应该关心之后,我决定重新考虑这一点并看看在它作为一个布局问题。只有当布局的高度低于某个阈值时,我才会遇到问题。
我为主布局创建了一个子类,并覆盖了onLayout(),当 a) 布局高度从低于阈值变为高于阈值和 b) 高度从高于阈值变为低于阈值时,它将触发回调事件。根据它采用的方式,我会启动一个动画来删除徽标或重新显示它。
我不会在这里发布该代码,因为如果我现在就发布,我会使用ViewTreeObserver.OnGlobalLayoutListener 来找出布局何时更改。它与this answer 最相似,只是我不会测试高度变化量,而是设置某个阈值并在高度超过阈值时运行适当的动画。
【讨论】: