我的应用程序底部有一个垂直滑动抽屉。当软键盘打开时,它会向上推动抽屉的卡舌,因此它位于键盘的顶部。我实际上希望它保留在屏幕底部,当显示键盘时隐藏起来。

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

评论

嗨,我在清单文件中使用了哪个标志时遇到了同样的问题,请您帮我解决这个问题

这个问题在这里重复:stackoverflow.com/questions/5516216/…

#1 楼

您只需在活动标签内的windowSoftInputMode文件中将Activity的adjustPan标志切换为AndroidMainfest.xml
查看官方文档以获取更多信息。
<activity
   ...
   android:windowSoftInputMode="adjustPan"> 
</activity>

如果您的容器没有改变尺寸,那么您高度可能设置为“匹配父级”。如果可能,请将父级设置为“包装内容”,或者将约束条件设置为在父级顶部和底部带有约束的约束布局。
父级容器将缩小以适应可用空间,因此您的内容可能应该放在内部角度视图以防止(取决于电话制造商和所选择的布局...)

内容被粉碎在一起
内容从屏幕上垂下
由于即使在键盘下方,它也位于键盘下方

,但内容可能会出现问题1-3。

评论


我不想平移视图,我希望它在原处保持静止,只是让键盘遮盖住要遮盖的一切。

–克里斯托弗·佩里(Christopher Perry)
2010-11-17 23:41

通过平移,这意味着视图将被滚动以使您键入的视图可见。换句话说,如果刚出现的键盘没有掩盖聚焦视图,它将保持静态。

–亚历山大·奥利尼科夫(Alexander Oleynikov)
2010-11-18 20:42



我正面临着同样的问题。在清单文件中将windowSoftInputMode标志设置为“ adjustPan”。但不起作用。如何解决

–Subrat
2011年5月31日晚上10:23

对于在屏幕底部有一排按钮而在其上方具有ScrollView的情况没有帮助。无论windowSoftInputMode中的值是多少,按钮都会被上推。

– Artem Russakovskii
11-10-17在21:44

不能零碎工作。怎么做?

– Prashanth Debbadwar
16-4-19的7:26

#2 楼

没有一个答案对我有用,但这确实成功了,将这个属性添加到您的activity中的AndroidManifest.xml标记中:
<activity
     ...
   android:windowSoftInputMode="adjustNothing"> 
</activity>


评论


这使键盘看起来像覆盖内容,而无需进行布局来重新计算其高度。

–重新继承
2014年6月4日上午9:40

这解决了键盘推高内容的问题,尽管这是我和OP想要实现的目标。

–丹尼尔·道格拉斯(Daniel Douglas)
2014年7月1日15:32

您可以从@Dom借用getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);以编程方式设置此值

–布朗·戴维斯
2015年9月18日,下午5:32

与其他答案不同(果冻豆4.1),这确实对我有用

–Virus721
2015年12月10日在9:52

完善!就我而言,它也起作用。我正在显示一个内部具有edittext的对话框。对话框打开后,键盘也会出现。我已经尝试过“ adjustPan”,但是它阻止了键盘的出现功能。因此,在我的情况下,“ adjustNothing”效果更好。

– sembozdemir
16年1月28日在14:03

#3 楼

就我而言,按下按钮的原因是因为它们上方的视图是ScrollView,而无论我设置的android:windowSoftInputMode值是多少,按钮都被向上推到键盘上方时它就会折叠。

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

评论


但是在这种情况下,软键盘覆盖了屏幕的一部分,无法向下滚动。似乎只有一种方法可以防止底部面板显示在键盘顶部-在键盘打开时将其隐藏...

–德米特里
2012年7月16日在21:22



就是这个!我认为此设置非常有趣,因为这是我发现达到“ adjustNothing”缺失属性效果的唯一方法!

– rupps
13年3月3日在23:52

我将其与Textview一起使用很棒的tnx

– Sunil Chaudhary
16年8月9日在9:13

@Artem Russakovskii我不知道您是谁,但我爱您提供此解决方案。非常感谢。

–级别
17年1月12日在14:56

@Artem Russakovskii,这非常好用。非常感谢。

– SkypeDogg
19年1月18日在10:15

#4 楼

您可以尝试通过在活动的onCreate方法中添加以下代码来动态添加此属性:

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


这对我有用,但是:

android:windowSoftInputMode="adjustPan"


同伴。

评论


您是否在AndroidManifest.xml中添加了android:windowSoftInputMode =“ adjustPan”?

– Habeeb Perwad
2014年4月29日在11:11

不,因为它对我没有任何影响。第一行代码完成了这项工作。 :) @HabeebPerwad

–Dom
2014年6月8日在21:59

我在AndroidManifest.xml文件中添加了秒行。我认为那之后才奏效。所以问。

– Habeeb Perwad
2014年6月9日4:50

@Dom,如何使用“ getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);”碎片?

–图萨·戈尼亚(Tushar Gogna)
2014年9月12日下午5:05

最后!这可行!我有一个控制器(从FragmentActivity扩展)和一些附加到它的视图(这些视图从RelativeLayout扩展)。因此,在麻烦的视图中,我做了controller.getWindow()...就像你说的那样。作品

– Alaa M.
15年7月20日在21:25

#5 楼

这些答案对我没有帮助。因此,我尝试了以下操作:

android:windowSoftInputMode="adjustResize"


这就像一个符咒,现在我应用程序的标题没有消失。更平滑。

评论


这对我来说几乎完美。唯一的问题是键盘的建议栏/行仍然隐藏了我的布局。你有遇到这样的问题吗?

–苏菲安
18年8月29日在7:35

我还没有遇到这个问题。 @苏菲安

– amalBit
18年8月29日在8:55

那时我还没有遇到任何问题。现在我不确定。 @苏菲安

– amalBit
18年8月29日在11:43

对于那些可能遇到类似问题的人,这可能是由于TabLayout所致。一旦将其可见性设置为View.GONE,问题就消失了。现在可能是重新设计布局的时候了。

–苏菲安
18年9月8日在18:02

#6 楼

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

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


将其放在onResume()中

#7 楼

这个为我工作了

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


#8 楼

为了将来的读者。

我希望对此问题进行特定控制,所以我要做的是:

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

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

                    }
                }
            });


评论


@天网你是绝对正确的!这是我用于自己的问题的自定义解决方案。

–石油
16年1月18日在18:57

嘿,这真是太好了。但是,在键盘关闭的情况下,视图会在很短的时间内(毫秒)切换到可见状态。因此,我没有直接设置可见性,而是使用view.post(Runnable runnable)并从那里设置可见性。结果对我来说很棒

–daisura99
16-09-21在9:35

@Petro好吧,我绝对讨厌Android

–安德鲁(Andrew)
9月18日下午14:12

是的,这将是我永远的最后一个android项目。之后,我将切换到iOS或完全停止对应用程序进行编程。真可怕

–安德鲁(Andrew)
9月21日13:04



@Andrew Adob​​e XD具有导出到Flutter功能的功能,请检查一下...可能会让您的生活更轻松

–石油
9月23日13:51

#9 楼

只需添加一行...

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

我刚刚解决了:) :)

#10 楼

这是最适合我的最佳选择

android:windowSoftInputMode="adjustNothing"


尝试一下!

#11 楼

对于xamarin用户,将此代码添加到MainActivity类的Activity属性中,或者您可以将此代码Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing)添加到MainActivity类的OnCreate方法中。

#12 楼

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

android:windowSoftInputMode="adjustResize"


#13 楼

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

android:windowSoftInputMode="adjustResize"


评论


这很好。但是,仅建议一下,使用百分比时效果不佳。因为它重新调整了一些元素。因此,如果您的约束元素具有百分比,那么您将遇到问题。使用wrap_content代替,它将很好地工作。

–蒂亚戈·席尔瓦(Thiago Silva)
6月1日14:16

#14 楼

android:windowSoftInputMode="stateHidden|adjustNothing"


此代码有效。

评论


我认为android:windowSoftInputMode =“ stateHidden | adjustPan”也应该起作用。

– Arthur Sady Cordeiro Rossetti
18年5月15日在13:02

#15 楼

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

android:isScrollContainer="false"


祝你好运!

#16 楼

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


这个为我工作。

#17 楼

对于滚动视图:

如果在Android清单中添加了android:windowSoftInputMode="stateHidden|adjustPan"之后仍然无法正常工作。

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

检查您的按钮所在的xml,并确保它位于滚动视图括号内,而不是超出它。

希望这对您有所帮助。 :D

#18 楼

就我而言,我需要使键盘保持隐藏状态,并且在单击按钮后就需要调整布局,因此我只在清单中添加了此命令,它就变得非常正确。

android:windowSoftInputMode="stateHidden|adjustResize"


#19 楼

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

将其添加到清单文件中的活动中

android:windowSoftInputMode="stateHidden|adjustPan"


#20 楼

他们都没有为我工作,请尝试这个

 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 楼

活动的主窗口不会调整大小以为软键盘腾出空间。而是,窗口的内容将自动平移,以使当前焦点不会被键盘遮挡,并且用户始终可以看到他们在键入什么。

android:windowSoftInputMode="adjustPan"


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

#22 楼

尝试使用此功能:

android:windowSoftInputMode="stateHidden|adjustPan"


#23 楼

此代码可以为您提供帮助。在您的oncreate方法中使用它。

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


评论


我尝试了这个,但是我遇到了一个问题,即视图将视图的底部切掉了一部分,并推了视图以覆盖上面的时间?关于什么布局发生变化或需要什么的任何想法? stackoverflow.com/questions/39909897/…

–Lion789
16-10-7在6:47

#24 楼

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

android:windowSoftInputMode="adjustPan"


#25 楼

@manifest在您的活动中:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"


#26 楼

我已经解决了问题,方法是在清单文件中添加
 android:windowSoftInputMode="adjustNothing" 


,并将Recyclerviews约束isScrollContainer设置为false。

android:isScrollContainer="false"


#27 楼

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

祝你好运

#28 楼

解决此问题的方法有两种。
转到AndroidManifist.xml,并在您的活动名称下添加此行
   android:windowSoftInputMode="adjustPan"

如以下代码中所示,我已添加到注册活动。
 <activity android:name=".Register"
            android:windowSoftInputMode="adjustPan">

以第二种方式转到您的活动,然后在onCreate方法中添加此代码。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);