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

Chr*_*rry 352 keyboard layout android view

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

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

Ale*_*kov 602

您只需将活动的切换windowSoftInputMode标志adjustPanAndroidMainfest.xml您的活动标签内的文件.

查看官方文档以获取更多信息.

<activity
   ...
   android:windowSoftInputMode="adjustPan"> 
</activity>
Run Code Online (Sandbox Code Playgroud)

  • 我不希望视图平移,我希望它保持静止的状态,只是让键盘覆盖它将要掩盖的任何东西. (38认同)
  • 在我的情况下,屏幕底部有一排按钮,上面有一个ScrollView,这没有用.无论windowSoftInputMode中的值是什么,按钮都会被推高. (19认同)
  • 我面临同样的问题.使窗口文件中的windowSoftInputMode标志为"adjustPan"但不起作用.如何解决它 (18认同)
  • 通过平移它意味着将滚动视图以使您正在键入的视图可见.换句话说,如果只是出现键盘没有掩盖焦点视图它将保持静态. (4认同)
  • 我发现只要您的活动不是全屏,这种通用方法就有效 (2认同)
  • 不能零碎工作。怎么做? (2认同)

Dan*_*las 165

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

android:windowSoftInputMode="adjustNothing"
Run Code Online (Sandbox Code Playgroud)

  • 这解决了键盘推送内容的问题,尽管这是我和OP想要实现的. (13认同)
  • 借用@Dom你可以使用`getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);`以编程方式设置这个值 (7认同)
  • 这使得键盘看起来覆盖了内容,而没有使布局重新计算它的高度. (6认同)

Art*_*kii 77

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

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

  • 但是在这种情况下,软键盘覆盖了屏幕的一部分,无法向下滚动。似乎只有一种方法可以防止底部面板显示在键盘顶部-在键盘打开时将其隐藏... (2认同)
  • @Artem Russakovskii我不知道你是谁,但我爱你这个解决方案.非常感谢. (2认同)

Dom*_*Dom 64

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

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Run Code Online (Sandbox Code Playgroud)

这对我有用,而不是:

android:windowSoftInputMode="adjustPan"
Run Code Online (Sandbox Code Playgroud)

didnt.

  • @Dom,如何在片段中使用“`getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);`”? (2认同)

ama*_*Bit 37

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

android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)

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


Cha*_*raM 12

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

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
Run Code Online (Sandbox Code Playgroud)

把它放在onResume()中


Sra*_*ani 9

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

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

我刚刚解决了:) :)


Pet*_*tro 9

对于未来的读者.

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

从片段或活动中隐藏其他视图(键盘启动时不需要),然后将其还原以解决此问题:

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

                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

  • 嘿,这太棒了.但是,键盘关闭的实例,有一个短周期(毫秒),其中视图切换到可见.因此,我不是直接设置可见性,而是使用`view.post(Runnable runnable)`并从那里设置可见性.结果对我来说很棒 (3认同)

Tus*_*tel 8

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

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing
Run Code Online (Sandbox Code Playgroud)

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


小智 7

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

android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)


amy*_*mna 7

android:windowSoftInputMode="stateHidden|adjustNothing"
Run Code Online (Sandbox Code Playgroud)

此代码有效。


小智 6

将以下代码添加到Manifest文件的"活动"中.

android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)


小智 6

这是最适合我的

android:windowSoftInputMode="adjustNothing"
Run Code Online (Sandbox Code Playgroud)

试试吧!


Ali*_*waz 6

好吧,我已经看过这些答案,但就我而言,我遇到了同样的问题,并通过一个非常方便且最简单的解决方案获得了庇护,该解决方案涉及在 xml 文件中的 Scrollview 标记中放置一个非常小的无辜属性。那是

android:isScrollContainer="false"
Run Code Online (Sandbox Code Playgroud)

祝你好运!


Sur*_*ttu 6

这个为我工作

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
Run Code Online (Sandbox Code Playgroud)