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

时间:2010-11-17 18:38:17

标签: android layout keyboard view

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

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

28 个答案:

答案 0 :(得分:557)

您只需在活动代码中的windowSoftInputMode文件中将活动的adjustPan标记切换为AndroidMainfest.xml即可。

查看official documentation了解详情。

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

答案 1 :(得分:147)

这些答案都没有对我有用,但这就是诀窍:

android:windowSoftInputMode="adjustNothing"

答案 2 :(得分:72)

在我的情况下,按钮被推高的原因是因为它们上方的视图是ScrollView,并且无论android:windowSoftInputMode的值是什么,它都会在键盘上方按下按钮时折叠我正在设置。

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

答案 3 :(得分:60)

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

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

这对我有用,而不是:

android:windowSoftInputMode="adjustPan"

didnt。

答案 4 :(得分:34)

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

android:windowSoftInputMode="adjustResize"

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

答案 5 :(得分:9)

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

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

将其放在onResume()

答案 6 :(得分: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 :(得分:7)

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

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

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

答案 8 :(得分:7)

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

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

我刚刚解决了:) :)

答案 9 :(得分:6)

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

android:windowSoftInputMode="adjustResize"

答案 10 :(得分:6)

android:windowSoftInputMode="stateHidden|adjustNothing"

此代码有效。

答案 11 :(得分:5)

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

android:windowSoftInputMode="adjustResize"

答案 12 :(得分:4)

这是对我有用的最好的

android:windowSoftInputMode="adjustNothing"

试试吧!

答案 13 :(得分:3)

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

android:isScrollContainer="false"
祝你好运!

答案 14 :(得分:3)

这个为我工作了

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

答案 15 :(得分:2)

滚动视图:

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

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

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

希望这会有所帮助。 :D

答案 16 :(得分:2)

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

android:windowSoftInputMode="adjustPan"

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

答案 17 :(得分:1)

我在这个问题上苦苦挣扎了一段时间。有些解决方案有效,但是我的某些观点仍然被推高,而另一些则没有。。。因此它并不能完全解决我的问题。最后,工作是在活动标签的清单中添加以下代码...

android:windowSoftInputMode="stateHidden|adjustPan|adjustResize"

祝你好运

答案 18 :(得分:1)

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

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

答案 19 :(得分:1)

我通过添加

解决了我的问题
 android:windowSoftInputMode="adjustNothing" 

在清单文件中添加。

并使Recyclerviews约束isScrollContainer设置为false。

android:isScrollContainer="false"

答案 20 :(得分:1)

他们都不为我工作,尝试这个

 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) {

            }
        }
    });

}

答案 21 :(得分:1)

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

将此添加到清单文件中的“活动”中

android:windowSoftInputMode =“ stateHidden | adjustPan”`

答案 22 :(得分:1)

@在您的活动中显示:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

答案 23 :(得分:1)

$part_column

这个适合我。

答案 24 :(得分:1)

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

android:windowSoftInputMode="stateHidden|adjustResize"

答案 25 :(得分:1)

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

android:windowSoftInputMode="adjustPan"

答案 26 :(得分:1)

尝试使用它:

android:windowSoftInputMode="stateHidden|adjustPan"

答案 27 :(得分:0)

有两种方法可以解决此问题。 转到AndroidManifist.xml,然后在您的活动名称中添加此行

   android:windowSoftInputMode="adjustPan"

如下面的代码所示,我已添加到Register Activity。

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

第二种方法,进入您的活动,然后在onCreate方法中添加以下代码。

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