1

我有一个布局,顶部有一个大的 EditText 视图 + 底部有一堆按钮。使用 adjust_resize 激活/停用 ime 时,EditText 会收缩和扩展。底部的按钮被推到 ime 上方。

我想在显示 ime 时隐藏这些按钮,以便为 EditText 视图提供足够的空间。

到目前为止,我已经尝试了以下方法:

  • 子类化 EditText 并为活动提供在视图的 OnSizeChanged 上注册回调的选项。

  • 使用此回调将按钮(实际上是布局容器)的可见性更改为 GONE。

这项工作正常,并且在 ime 弹出时确实隐藏了按钮。但是,EditText 不会扩展到新的可用空间。此外,当关闭 ime 时,EditText 字段现在比原来大,将(现在显示的)按钮推到屏幕外。

我还应该补充一点,当在视图中输入第一个字母时,ime 会显示单词选项,屏幕会重新绘制,EditText 会填充空白空间。

关于如何让它发挥作用的任何想法?或者更好的是,是否有更简单的解决方案来满足我的要求?

谢谢...

注意:在我看来,滚动不是一个好的选择。

4

2 回答 2

1

我通过稍微改变上述方法来实现这一点:

  • 用 FrameLayout 包裹整个布局

  • 子类化 FrameLayout 并为活动提供在布局的 OnMeasure 上注册回调的选项

这使活动有机会在测量视图之前更改视图的可见性。

我仍然很高兴听到更简单的解决方案,尤其是在确定键盘当前是否可见方面。(dumpsys 窗口显示此信息。我们可以轻松获得它吗?)

于 2010-08-06T09:19:53.140 回答
0

你试过打电话myView.invalidade()吗?

我正在使用 GONE 属性,但后来更改为,button.setVisibility(View.INVISIBLE);因为我的屏幕上没有任何其他内容。

在adjust_resize 上,您需要再次检查键盘何时消失并再次显示按钮。

于 2010-08-04T21:14:34.380 回答