我的应用程序底部有一个垂直滑动的抽屉。当软键盘打开时,它会把抽屉的标签往上推,所以它位于键盘上方。实际上,我想让它保持在屏幕的底部,当键盘显示时,它会被隐藏起来。
有人遇到过这个问题吗?知道怎么修吗?
我的应用程序底部有一个垂直滑动的抽屉。当软键盘打开时,它会把抽屉的标签往上推,所以它位于键盘上方。实际上,我想让它保持在屏幕的底部,当键盘显示时,它会被隐藏起来。
有人遇到过这个问题吗?知道怎么修吗?
你可以简单地切换你的活动的windowSoftInputModeflag为adjustPan在你的androidmainfst .xml文件在你的活动标签。
查看官方文档了解更多信息。
<activity
...
android:windowSoftInputMode="adjustPan">
</activity>
如果你的容器没有改变大小,那么你可能已经将高度设置为“match parent”。如果可能的话,将父元素设置为“Wrap Content”,或者在父元素的顶部和底部设置约束布局。
父容器会缩小以适应可用空间,所以很可能你的内容应该在一个训斥视图内,以防止(取决于手机制造商和选择的布局…)
内容被粉碎在一起 内容悬挂在屏幕上 内容无法访问,因为它在键盘下面
即使它所在的布局是相对布局或约束布局,内容也会出现问题1-3。
在我的例子中,按钮向上推的原因是因为它们上面的视图是一个ScrollView,当按钮向上推到键盘上方时,它就会崩溃,不管我设置的android:windowSoftInputMode是什么值。
我可以通过设置android:isScrollContainer="false"在位于按钮上方的ScrollView上避免我的底部一行按钮被软键盘推上去。
这些答案对我没有帮助。所以我试着这样做:
android:windowSoftInputMode="adjustResize"
这就像一个魅力,现在我的应用程序的头没有消失。它的平滑。
到目前为止,答案并没有帮助我,因为我有一个按钮和textInput字段(并排)下面的textView一直被键盘隐藏,但这已经解决了我的问题:
android:windowSoftInputMode="adjustResize"
活动的主窗口将不会调整大小为软键盘腾出空间。相反,窗口的内容将自动平移,以便当前焦点永远不会被键盘遮挡,用户总是可以看到他们正在键入的内容。
android:windowSoftInputMode="adjustPan"
这可能是您想要的更好的解决方案。
您可以尝试动态添加此属性,通过将以下代码放在您的活动的onCreate方法中:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
这对我来说很管用,但那就是:
android:windowSoftInputMode="adjustPan"
没有。
只需要添加一行…
添加android:windowSoftInputMode="stateHidden|adjustPan"在必需的活动你的manifest文件。
我刚被解决了:):)
没有一个答案为我工作,但这做到了技巧,添加此属性到您的AndroidManifest.xml的活动标签:
<activity
...
android:windowSoftInputMode="adjustNothing">
</activity>
滚动视图:
如果在你的android Manifest中添加了android:windowSoftInputMode="stateHidden|adjustPan",仍然不起作用。
它可能会受到影响,因为当键盘出现时,它将进入滚动视图,如果你的按钮/任何对象不在滚动视图中,那么对象将跟随键盘并移动其位置。
检查你的xml按钮在哪里,并确保它在滚动视图括号下,而不是在它外面。
希望这能帮到你。: D
给以后的读者。
我想要对这个问题进行具体的控制,所以我这样做了:
从一个片段或活动中,隐藏你的其他视图(当键盘打开时不需要),然后恢复它们来解决这个问题:
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);
}
}
});
对于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()中
在你的清单文件中包含你想要显示的activity。但是要确保不要使用全屏activity
android:windowSoftInputMode="adjustPan"
好吧,我已经看了这些答案,但在我的情况下,我陷入了同样的问题,并通过一个非常方便和最简单的解决方案,包括把一个非常小的无辜属性在你的Scrollview标签驻留在你的xml文件避难。这是
android:isScrollContainer="false"
好运!
在我的情况下,我需要键盘保持隐藏,就在点击按钮后,我的布局需要调整,所以我只是在清单中添加了这个命令,它得到了超级正确。
android:windowSoftInputMode="stateHidden|adjustResize"
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
这个对我有用。
这个方法对我很管用
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);