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);
这里的视图是使用自定义键盘的视图。
当自定义键盘绘制两次时我遇到了问题:
- 当android软键盘被隐藏,但布局还没有展开。在这种情况下,自定义键盘会出现在屏幕的上半部分。
- 布局展开后。在这种情况下,自定义键盘会出现在屏幕的下半部分。
我想做的是以某种方式避免两个键盘同时出现。
在 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;
};
希望这对遇到类似问题的人有所帮助。
在我的 activity class 中,我同时使用自定义键盘和 android 软文本键盘。 Android 文本软键盘调整大小 activity 布局。如果我在软键盘打开时打开自定义键盘,最后一个键盘会隐藏,布局会向后扩展。但我在通话后立即打开自定义键盘
InputMethodManager imm = (InputMethodManager)context.GetSystemService(Context.InputMethodService);
imm.HideSoftInputFromWindow(view.WindowToken, 0);
这里的视图是使用自定义键盘的视图。 当自定义键盘绘制两次时我遇到了问题:
- 当android软键盘被隐藏,但布局还没有展开。在这种情况下,自定义键盘会出现在屏幕的上半部分。
- 布局展开后。在这种情况下,自定义键盘会出现在屏幕的下半部分。
我想做的是以某种方式避免两个键盘同时出现。 在 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;
};
希望这对遇到类似问题的人有所帮助。