我的应用程序底部有一个垂直滑动抽屉。当软键盘打开时,它会将抽屉的标签向上推,因此它位于键盘顶部。我实际上希望它保留在屏幕底部,在显示键盘时隐藏。
还有其他人遇到这个问题吗?知道如何解决吗?
您只需在活动标签内的 AndroidMainfest.xml
文件中将活动的 windowSoftInputMode
标志切换为 adjustPan
。
查看 official documentation 了解更多信息。
<activity
...
android:windowSoftInputMode="adjustPan">
</activity>
如果您的容器没有改变大小,那么您可能将高度设置为“匹配父级”。如果可能,将父级设置为“包装内容”,或者将约束布局设置为父级的顶部和底部。
父容器将缩小以适应可用空间,因此您的内容很可能应该在 scolling 视图内以防止(取决于手机制造商和选择的布局......)
内容被粉碎在一起 内容挂在屏幕上 内容因位于键盘下方而无法访问
即使它所在的布局是相对布局或约束布局,内容也可能出现问题 1-3。
没有一个答案对我有用,但这成功了,将此属性添加到 AndroidManifest.xml
中的 activity
标记:
<activity
...
android:windowSoftInputMode="adjustNothing">
</activity>
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
以编程方式设置此值
在我的例子中,按钮被推上去的原因是因为它们上方的视图是 ScrollView
,并且无论我设置什么值 android:windowSoftInputMode
,它都会在键盘上方被推上的按钮折叠起来。
通过在按钮上方的 ScrollView
上设置 android:isScrollContainer="false"
,我能够避免底部的一排按钮被软键盘向上推。
listview
WebViews
,您还需要在 android:isScrollContainer="false"
之外添加 android:windowSoftInputMode="adjustPan">
您可以尝试动态添加此属性,方法是将以下代码放入 Activity 的 onCreate
方法中:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
这对我有用,但是:
android:windowSoftInputMode="adjustPan"
没有。
android:windowSoftInputMode="adjustPan"
?
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
”?
FragmentActivity
扩展)和一些附加到它的视图(视图从 RelativeLayout
扩展)。所以在麻烦的观点中,我像你说的那样做了controller.getWindow()...
。作品
这里的这些答案对我没有帮助。所以我尝试了这个:
android:windowSoftInputMode="adjustResize"
这就像一个魅力,现在我的应用程序的标题并没有消失。它更平滑。
TabLayout
。一旦我将其可见性设置为 View.GONE
,问题就消失了。可能是时候重新设计我的布局了。
要在片段中以编程方式执行此操作,您可以使用以下代码
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
把它放在 onResume()
这个对我有用
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
只需添加一行...
在您的 manifest file
的必需活动中添加 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);
}
}
});
view.post(Runnable runnable)
并从那里设置可见性。结果对我来说很棒
到目前为止,答案并没有帮助我,因为我在 textView 下方有一个按钮和一个 textInput 字段(并排),它一直被键盘隐藏,但这解决了我的问题:
android:windowSoftInputMode="adjustResize"
对于 xamarin 用户,将此代码添加到 MainActivity 类的 Activity 属性中,
WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing
或者您可以将此代码 Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing)
添加到 MainActivity 类的 OnCreate 方法中。
这是最适合我的
android:windowSoftInputMode="adjustNothing"
试试看!
将以下代码添加到清单文件的“活动”中。
android:windowSoftInputMode="adjustResize"
android:windowSoftInputMode="stateHidden|adjustNothing"
此代码有效。
好吧,我已经看过这些答案,但在我的情况下,我遇到了同样的问题,并通过一个非常方便和最简单的解决方案获得了庇护,该解决方案涉及在 xml 文件中的 Scrollview 标记中放置一个非常小的无辜属性。那是
android:isScrollContainer="false"
祝你好运!
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
这个对我有用。
我通过添加解决了我的问题
android:windowSoftInputMode="adjustNothing"
在清单文件中添加。
并使 Recyclerviews 约束 isScrollContainer 为 false 。
android:isScrollContainer="false"
尝试使用这个:
android:windowSoftInputMode="stateHidden|adjustPan"
对于滚动视图:
如果在您的 Android 清单中添加 android:windowSoftInputMode="stateHidden|adjustPan"
后仍然无法正常工作。
它可能会受到影响,因为当键盘出现时,它将进入滚动视图,如果您的按钮/任何对象不在您的滚动视图中,那么这些对象将跟随键盘并移动其位置。
检查你的 xml 你的按钮在哪里,并确保它在你的滚动视图支架下而不是在它外面。
希望这会有所帮助。 :D
在我的情况下,我需要键盘保持隐藏状态,并且在单击按钮后我的布局需要调整,所以我只是在清单中添加了这个命令,它变得非常正确。
android:windowSoftInputMode="stateHidden|adjustResize"
当您想在打开键盘时隐藏视图时。
将此添加到清单文件中的活动中
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="stateHidden|adjustPan|adjustResize"
祝你好运
Activity 的主窗口不会调整大小来为软键盘腾出空间。相反,窗口的内容将自动平移,这样当前的焦点就不会被键盘遮挡,用户总是可以看到他们正在输入的内容。
android:windowSoftInputMode="adjustPan"
这可能是您想要的更好的解决方案。
此代码可能会对您有所帮助。在您的 oncreate
方法中使用它。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
包含在您要显示的活动下的清单文件中。但请确保不使用全屏活动
android:windowSoftInputMode="adjustPan"
@manifest 在您的活动中:
android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
有两种方法可以解决这个问题。转到 AndroidManifist.xml,并以您的活动名称添加此行
android:windowSoftInputMode="adjustPan"
如以下代码所示,我已添加到注册活动中。
<activity android:name=".Register"
android:windowSoftInputMode="adjustPan">
在第二种方法中,转到您的活动,并在您的 onCreate 方法中添加此代码。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
不定期副业成功案例分享