软件键盘弹出时,Snackbar会扩展显示

6
我发现一个问题,当软键盘弹出时,snackbar会自动扩展以适应屏幕上的listview大小。
有问题的Snackbar enter image description here 正常的Snackbar(键盘未弹出) Normal snackbar 我已经通过编程设置高度来稍微解决了这个问题,但是这样会使snackbar中的文本消失,我不知道该如何添加回来。
                ViewGroup.LayoutParams lp = snackbarView.getLayoutParams();
                lp.height = 150;
                snackbarView.setLayoutParams(lp);

enter image description here

Snackbar是如下添加的:

        mConnectionLostSnackbar = Snackbar.make(view, mConnectionLostString, Snackbar.LENGTH_INDEFINITE);
        final View snackbarView = mConnectionLostSnackbar.getView();
        TextView textView = snackbarView.findViewById(android.support.design.R.id.snackbar_text);
        textView.setLineSpacing(0, SNACKBAR_LINE_SPACING_MULTIPLIER);
        snackbarView.getViewTreeObserver().addOnPreDrawListener(new NotDismissiblePreDrawListener(snackbarView));
        mConnectionLostSnackbar.show();

我希望能得到关于当键盘弹出时不扩展 snackbar 的任何想法。先感谢您的帮助。

3个回答

3
我注意到,只有当Snackbar附加到具有另一个CoordinatorLayout的父CoordinatorLayout时,才会发生这种情况。我想由于多个CoordinatorLayout的存在,<添加尽可能多的底部填充以显示在键盘上方的Snackbar>的行为被复制了,Snackbar最终占据整个屏幕。
解决方案是将Snackbar附加到最顶层的CoordinatorLayout上。在我的场景中,我有一个Activity,其内容视图为CoordinatorLayout,它托管一个具有CoordinatorLayout作为根视图的片段。当片段需要显示Snackbar时,它将其附加到Activity的CoordinatorLayout上,然后当键盘显示时,它会正确地执行。请注意,我现在正在使用AndroidX库而不是support库,因此行为可能略有不同。

1
我也遇到了同样的问题,但是我找不到问题的原因。
为了避免扩展 snackbar,我决定将它放在键盘后面。通过将以下行添加到所需活动的清单中,可以实现这一点。
android:windowSoftInputMode="adjustNothing"

我真的很想知道为什么会发生这种情况,因为在这个项目中我经常使用 snackbar,但只有一个活动出现了问题。


谢谢您的回答,但是在我的使用情况下,我需要snackbar保持可见。 - Karen Forde
你需要同时显示键盘和 Snackbar 吗?在我的使用场景中,我隐藏了键盘并显示了 Snackbar,也许这对你有用。 - Bruno
在这种情况下,我需要它们同时显示。 - Karen Forde

0

只需将此属性放入您的Manifest文件中,即可应用于您的适当活动。

<activity android:name=".YourActivity"
          android:windowSoftInputMode="adjustResize"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接