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

我的应用程序底部有一个垂直滑动的抽屉。当软键盘打开时,它会把抽屉的标签往上推,所以它位于键盘上方。实际上,我想让它保持在屏幕的底部,当键盘显示时,它会被隐藏起来。

有人遇到过这个问题吗?知道怎么修吗?

370250 次浏览

你可以简单地将你的活动的windowSoftInputModeflag切换到你的活动标签内的AndroidMainfest.xml文件中的adjustPan

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

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

如果容器不改变大小,那么高度可能被设置为“match parent”。如果可能的话,将父元素设置为“包装内容”,或者在父元素的顶部和底部设置约束布局。

父容器会缩小以适应可用空间,所以很可能你的内容应该在一个训斥视图内,以防止(取决于手机制造商和选择的布局…)

  1. 内容被粉碎在一起
  2. 内容悬挂在屏幕上
  3. 内容无法访问,因为它在键盘下面

即使它所在的布局是相对布局或约束布局,内容也会出现问题1-3。

在我的例子中,按钮往上推的原因是因为它们上面的视图是ScrollView,并且无论我设置的android:windowSoftInputMode值是什么,它都随着按钮往上推而折叠。

我可以通过在位于按钮上方的ScrollView上设置android:isScrollContainer="false"来避免底部一行按钮被软键盘推上去。

这些答案对我没有帮助。所以我试着这样做:

android:windowSoftInputMode="adjustResize"

这就像一个魅力,现在我的应用程序的头没有消失。它的平滑。

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

android:windowSoftInputMode="adjustResize"

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

android:windowSoftInputMode="adjustPan"

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

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

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

这对我来说很管用,但那就是:

android:windowSoftInputMode="adjustPan"

没有。

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

android:windowSoftInputMode="adjustResize"

只需要添加一行…

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

我刚被解决了:):)

没有一个答案对我有用,但这做到了,将此属性添加到AndroidManifest.xml中的activity标记:

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

滚动视图:

如果在你的Android Manifest中添加android:windowSoftInputMode="stateHidden|adjustPan"后仍然不工作。

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

检查你的xml按钮在哪里,并确保它在滚动视图括号下,而不是在它外面。

希望这能帮到你。: D

试着用这个:

android:windowSoftInputMode="stateHidden|adjustPan"

给以后的读者。

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

从一个片段或活动隐藏你的其他观点(当键盘打开时不需要),然后恢复它们来解决这个问题:

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


}
}
});

这对我来说是最好的方法

android:windowSoftInputMode="adjustNothing"

试一试!

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

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

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

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

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

要在片段中以编程方式完成此工作,您可以使用以下代码

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

将此放在onResume()中

android:windowSoftInputMode="stateHidden|adjustNothing"

这段代码可以工作。

在你的清单文件中包含你想要显示的activity。但是要确保不要使用全屏activity

android:windowSoftInputMode="adjustPan"

好吧,我已经看了这些答案,但在我的情况下,我陷入了同样的问题,并通过一个非常方便和最简单的解决方案,包括把一个非常小的无辜属性在你的Scrollview标签驻留在你的xml文件避难。这是

android:isScrollContainer="false"

好运!

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

android:windowSoftInputMode="stateHidden|adjustResize"
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

这个对我有用。

@manifest在你的活动中:

android:windowSoftInputMode="stateAlwaysHidden|adjustPan"

这个对我有用

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

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

将此添加到您的活动清单文件

android:windowSoftInputMode="stateHidden|adjustPan"

没有一个对我有用,试试这个

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


}
}
});


}

我通过添加解决了我的问题

 android:windowSoftInputMode="adjustNothing"

在清单文件中添加。

并使Recyclerviews约束isScrollContainer为false。

android:isScrollContainer="false"

我为这个问题纠结了一段时间。一些解决方案是有效的,但我的一些观点仍在推进,而另一些则没有……所以这并没有完全解决我的问题。最后,所做的工作是将以下代码行添加到我的活动标记清单中…

android:windowSoftInputMode="stateHidden|adjustPan|adjustResize"

祝你好运

有两种方法可以解决这个问题。 转到androidmanifest .xml,在你的活动名称中添加这一行

   android:windowSoftInputMode="adjustPan"

在下面的代码中,我已经添加到注册活动。

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

在第二种方法中,转到您的活动,并在您的onCreate方法中添加此代码。

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