android 文本键盘隐藏后自定义键盘显示两次

After android text keyboard hided custom keyboard displayed twice

在我的 activity class 中,我同时使用自定义键盘和 android 软文本键盘。 Android 文本软键盘调整大小 activity 布局。如果我在软键盘打开时打开自定义键盘,最后一个键盘会隐藏,布局会向后扩展。但我在通话后立即打开自定义键盘

InputMethodManager imm = (InputMethodManager)context.GetSystemService(Context.InputMethodService);
            imm.HideSoftInputFromWindow(view.WindowToken, 0);

这里的视图是使用自定义键盘的视图。 当自定义键盘绘制两次时我遇到了问题:

  1. 当android软键盘被隐藏,但布局还没有展开。在这种情况下,自定义键盘会出现在屏幕的上半部分。
  2. 布局展开后。在这种情况下,自定义键盘会出现在屏幕的下半部分。

我想做的是以某种方式避免两个键盘同时出现。 在 activity 代码中我只使用 SoftInput.StateAlwaysHidden WindowSoftInputMode。 SoftInput.AdjustPan 不方便,因为在那种情况下,某些视图可以通过 android 键盘隐藏。

经过几个小时的互联网搜索,答案已经找到。 Pspdfkit 有 great post.

经过小规模调查,它已在 Oncreate 方法中用 C# 重写:

    private View decorView;
    private int lastVisibleDecorViewHeight = 0;
    decorView = Window.DecorView;
    decorView.ViewTreeObserver.GlobalLayout += (sender, args) =>
        {
            Rect windowVisibleDisplayFrame = new Rect();
            decorView.GetWindowVisibleDisplayFrame(windowVisibleDisplayFrame);
            int visibleDecorViewHeight = windowVisibleDisplayFrame.Height();
            if (lastVisibleDecorViewHeight != 0)
            {
                if (lastVisibleDecorViewHeight > visibleDecorViewHeight)
                {
                    OnSoftKeyboardShown();
                }
                else if (lastVisibleDecorViewHeight < visibleDecorViewHeight)
                {
                    OnSoftKeyboardHidden();
                    if (!isAndroidSoftKeyboardShown && customKeyboardRequested)
                    {
                        Keyboard.RequestCustomKeyboard(requestedCustomKeyboardType);
                        customKeyboardRequested = false;
                    }
                }
            }
            lastVisibleDecorViewHeight = visibleDecorViewHeight;
        };

希望这对遇到类似问题的人有所帮助。