Android:如何防止软键盘将我的视图向上推?

487

我在应用程序底部有一个垂直滑动抽屉。当软键盘打开时,它会将抽屉的选项卡向上推,使其位于键盘顶部。实际上,我希望它保持在屏幕底部,并在显示键盘时隐藏。

还有其他人遇到这个问题吗?知道如何解决吗?


1
嗨,我遇到了相同的问题,你在清单文件中使用了哪个标志?你能帮我解决一下吗? - Nixit Patel
1
这个问题在这里已经有了重复:https://dev59.com/W2035IYBdhLWcg3wSN4G - WonderWorker
29个回答

2

对于滚动视图:

如果在Android Manifest中添加了android:windowSoftInputMode="stateHidden|adjustPan",但仍然无法正常工作。

可能是因为当键盘出现时,它会进入一个滚动视图,如果您的按钮/任何对象不在滚动视图中,则这些对象将跟随键盘并移动其位置。

检查您的xml,确保您的按钮位于滚动视图括号下方而不是括号外。

希望这能有所帮助。:D


2

这些都对我没用,试试这个

 private void scrollingWhileKeyboard() {
    drawerlayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            Rect r = new Rect();
            try {
                drawerlayout.getWindowVisibleDisplayFrame(r);
                int screenHeight = drawerlayout.getRootView().getHeight();
                int keypadHeight = screenHeight - r.bottom;
                if (keypadHeight > screenHeight * 0.15) {
                    tabLayout.setVisibility(View.GONE);
                } else {
                    tabLayout.setVisibility(View.VISIBLE);
                }
            } catch (NullPointerException e) {

            }
        }
    });

}

2

我曾经遇到这个问题很长时间,一些解决方案奏效了,但是一些视图仍然被推上去,而其他的则没有……所以它并没有完全解决我的问题。最终,解决问题的方法是在活动标签中添加以下代码行...

android:windowSoftInputMode="stateHidden|adjustPan|adjustResize"

祝你好运


1
在你的活动中添加@manifest:
android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

1

在您想要显示的活动下,将其包含在清单文件中。但请确保不要使用全屏活动。

android:windowSoftInputMode="adjustPan"

1
活动的主窗口不会调整大小以为软键盘腾出空间。相反,窗口内容将自动平移,以便当前焦点永远不被键盘遮挡,用户始终可以看到他们正在输入的内容。
android:windowSoftInputMode="adjustPan"

这可能是您所期望的更好解决方案。

1

这段代码可能会对你有所帮助。在你的oncreate方法中使用它。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

我尝试了这个,但是遇到了问题,视图的底部被裁剪了一部分,并将视图推到了上面的时间重叠?有什么布局更改或需要什么吗?https://dev59.com/7pvga4cB1Zd3GeqP1mox - Lion789

1

解决这个问题有两种方法。一种是进入AndroidManifest.xml,在你的活动名称中添加以下行:

   android:windowSoftInputMode="adjustPan"

如下代码所示,我已经添加到注册活动中。

 <activity android:name=".Register"
            android:windowSoftInputMode="adjustPan">

在第二种方式中,前往您的活动,并在onCreate方法中添加以下代码。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

0
我之前使用了透明状态栏,但是对我来说没有起作用。相反,隐藏状态栏的方式对我很有效。
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)

并在清单中添加了此项以进行活动
android:windowSoftInputMode="adjustResize"

对我来说很有效

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接