Android:尝试用 View 替换键盘时如何防止 View 跳转/闪烁

标签 android keyboard

我隐藏了键盘。如果我立即使我的 View 可见,键盘上方的 View 会一闪而过,然后下降到键盘的位置。

如果我等待键盘隐藏/显示并调整我的布局(使用我的全局布局的 onSizeChanged),然后尝试使我的 View 可见,在许多情况下系统不会正确地重新估计我的布局(也许因为我在布局更改生命周期的某个奇怪部分使 View 可见?) 所以在很多情况下,我最终都没有显示任何 View 。有时键盘上方应该隐藏 View 的地方有奇怪的空间。如果我执行 post(Runnable) 然后调用 requestLayout() 或使 View 在下一帧中可见,这并不好,因为闪烁当然又出现了。

所以基本上我想知道键盘何时调整我的 View 大小时的确切帧,以便我可以使它们可见/不可见并防止不同 View 结构/大小的闪烁。如果我等待 onSizeChanged,似乎为时已晚。

我真的希望系统能够正确运行并重新估计我的 View 大小并将它们放置在正确的位置,但如果在 onSizeChanged 中完成,它就无法正常工作。

最佳答案

我最终做了以下事情:

  1. 在隐藏部分屏幕和等待键盘出现之间禁用调整主屏幕大小
  2. 在显示键盘后启用调整大小(并触发调整大小)。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    if (resizingEnabled) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    } else {
        setMeasuredDimension(getWidth(), getHeight());
    }
}

关于Android:尝试用 View 替换键盘时如何防止 View 跳转/闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30721975/

相关文章:

android - 无法在 AsyncTask 中显示 ProgressDialog

android - 在日历 View 中更改当天的文本颜色

c++ - 使用 OpenGL/GLUT 如何检测是否同时按下两个键?

java - 如何向资源 ID 添加计数

java - ClipDrawable 在用作小部件的布局背景时不起作用

ios - 如何找出 iOS8 上当前使用的键盘?

java - 使 Android 键盘能够抵御 KeyLogger 攻击

java - 如何在 Java 中为其他程序制作虚拟键盘?

cordova - PhoneGap 中的软键盘覆盖了输入元素

java - 拆分操作栏不透明