Android:如何防止软键盘向上推?

问题描述 投票:325回答:24

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

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

android layout keyboard view
24个回答
573
投票

您只需在活动标签内的windowSoftInputMode文件中将Activity的adjustPanflag切换到AndroidMainfest.xml即可。

查看official documentation了解更多信息。

<activity
   ...
   android:windowSoftInputMode="adjustPan"> 
</activity>

6
投票

到目前为止,答案并没有帮助我,因为我在textView下面有一个按钮和一个textInput字段(并排),它一直被键盘隐藏,但这解决了我的问题:

android:windowSoftInputMode="adjustResize"

6
投票
android:windowSoftInputMode="stateHidden|adjustNothing"

这段代码有效。


5
投票

将以下代码添加到Manifest文件的“活动”中。

android:windowSoftInputMode="adjustResize"

5
投票

这对我来说是最好的

android:windowSoftInputMode="adjustNothing"

试试吧!


2
投票

对于滚动视图:

如果在您的Android Manifest中添加android:windowSoftInputMode="stateHidden|adjustPan"后仍然无效。

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

查看你的按钮所在的xml,并确保它位于滚动视图支架下,而不是它。

希望这会有所帮助。 :d


2
投票

好吧,我已经看过这些答案,但在我的情况下,我遇到了同样的问题,并通过一个非常方便和最简单的解决方案避难,涉及在您的xml文件中的Scrollview标记中放入一个非常小的无辜属性。那是

android:isScrollContainer="false"

祝好运!


2
投票

这个对我有用

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

1
投票

活动的主窗口不会调整大小以便为软键盘腾出空间。相反,窗口的内容将自动平移,以便键盘不会遮挡当前焦点,用户可以随时看到他们正在键入的内容。

android:windowSoftInputMode="adjustPan"

这可能是您想要的更好的解决方案。


1
投票

试着用这个:

android:windowSoftInputMode="stateHidden|adjustPan"

1
投票

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

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

156
投票

这些答案都没有对我有用,但是这样做了:

android:windowSoftInputMode="adjustNothing"

1
投票

在我的情况下,我需要键盘保持隐藏,只需点击按钮后我的布局需要调整,所以我只是在清单中添加了这个命令,它是超级正确的。

android:windowSoftInputMode="stateHidden|adjustResize"

1
投票

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

android:windowSoftInputMode="adjustPan"

1
投票
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

这个适合我。


1
投票

@manifest在你的活动中:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

1
投票

当你想在打开键盘时隐藏视图。

将此添加到清单文件`中的Activity中

机器人:windowSoftInputMode = “stateHidden | adjustPan”`


74
投票

在我的情况下,按钮被推高的原因是因为它们上面的视图是一个ScrollView,并且无论我设置的android:windowSoftInputMode值是什么值,按钮都被推到了键盘上方。

通过在位于按钮上方的android:isScrollContainer="false"上设置ScrollView,我能够避免我的底部按钮被软键盘向上推。


61
投票

您可以尝试动态添加此属性,方法是将以下代码放入活动的onCreate方法中:

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

这对我有用,而不是:

android:windowSoftInputMode="adjustPan"

didnt。


36
投票

这些答案对我没有帮助。所以我尝试了这个:

android:windowSoftInputMode="adjustResize"

这就像一个魅力,现在我的应用程序的标题不会消失。它更顺畅。


9
投票

要以编程方式在片段中执行此操作,您可以使用以下代码

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

把它放在onResume()中


8
投票

只需添加一行......

在你的android:windowSoftInputMode="stateHidden|adjustPan"所需的活动中添加manifest file

我刚刚解决了:) :)


7
投票

对于未来的读者。

我想要对这个问题进行具体控制,所以这就是我所做的:

从片段或活动中隐藏您的其他视图(键盘启动时不需要),然后恢复它们以解决此问题:

            rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect r = new Rect();
                    rootView.getWindowVisibleDisplayFrame(r);
                    int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);

                    if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                    //ok now we know the keyboard is up...
                        view_one.setVisibility(View.GONE);
                        view_two.setVisibility(View.GONE);

                    }else{
                    //ok now we know the keyboard is down...
                        view_one.setVisibility(View.VISIBLE);
                        view_two.setVisibility(View.VISIBLE);

                    }
                }
            });

7
投票

对于xamarin用户,将此代码添加到MainActivity类的Activity属性中,

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

或者您可以将此代码Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing)添加到MainActivity类的OnCreate方法中。

© www.soinside.com 2019 - 2024. All rights reserved.