我在应用程序底部有一个垂直滑动抽屉。当软键盘打开时,它会将抽屉的选项卡向上推,使其位于键盘顶部。实际上,我希望它保持在屏幕底部,并在显示键盘时隐藏。
还有其他人遇到这个问题吗?知道如何解决吗?
你可以在AndroidMainfest.xml
文件中的你的活动标签内,简单地将你的Activity的windowSoftInputMode
标记切换为adjustPan
。
请查看官方文档获取更多信息。
<activity
...
android:windowSoftInputMode="adjustPan">
</activity>
如果您的容器大小不变,则很可能将高度设置为“匹配父项”。如果可能,请将父项设置为“自适应内容”,或者使用约束布局,并将其约束到父项的顶部和底部。
父容器将缩小以适应可用空间,因此您的内容很可能应该放在一个滚动视图中,以避免(根据手机制造商和选择的布局而定...)
即使它所在的布局是相对布局或约束布局,内容也可能出现1-3号问题。
我尝试了所有的解答都不行,但这个方法可以,只需在你的 AndroidManifest.xml
文件中的activity
标签中添加此属性:
<activity
...
android:windowSoftInputMode="adjustNothing">
</activity>
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
编程设置此值。 - Bron Davies在我的情况下,按钮被推上去的原因是因为它们上方的视图是一个 ScrollView
,而且无论我设置的 android:windowSoftInputMode
的值是什么,它都会随着键盘折叠而将按钮推到键盘上面。
我能够通过在按钮上方的 ScrollView
上设置 android:isScrollContainer="false"
来避免底部按钮被软键盘推上去。
listview
。 - Ruchir BaroniaWebViews
,除了 android:isScrollContainer="false"
之外,您还需要添加 android:windowSoftInputMode="adjustPan">
。 - GuilhE您可以尝试通过动态添加该属性,将以下代码放置在您的活动的 onCreate
方法中:
您可以在活动的 onCreate
方法中尝试动态添加此属性:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
这个对我有效,但是那个不行:
android:windowSoftInputMode="adjustPan"
没有。
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
”? - Tushar GognaFragmentActivity
),并且有一些附加在上面的视图(这些视图扩展自RelativeLayout
)。所以在有问题的视图中,我像你说的那样做了controller.getWindow()...
。可行了。 - Alaa M.这里的回答没有帮助到我,所以我尝试了以下方法:
android:windowSoftInputMode="adjustResize"
这个方法非常有效,现在我的应用程序标题不会消失了。使用起来更加流畅。
TabLayout
引起的。一旦我将其可见性设置为View.GONE
,问题就解决了。也许现在是重新设计我的布局的时候了。 - Sufian要在片段中以编程方式完成此操作,您可以使用以下代码:
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
将其放置在onResume()中
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
针对未来读者。
我希望对这个问题有特定的控制,所以我做了以下操作:
在片段或活动中,隐藏其他不需要的视图(在键盘弹起时不需要显示),然后恢复它们以解决此问题:
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)
,然后从那里设置可见性。对我来说效果非常好。 - daisura99只需添加一行...
在您的清单文件(manifest file)
中的需要添加该属性android:windowSoftInputMode="stateHidden|adjustPan"
的活动(activity)。
问题已解决 :) :)
对于Xamarin用户,请将以下代码添加到MainActivity类的Activity属性中:
WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing
Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing)
添加到MainActivity类的OnCreate方法中。