显示软键盘时 Snackbar 会扩展

Snackbar expands when soft keyboard is showing

我发现了一个问题,当软键盘启动时,快餐栏会自行扩展以适应屏幕上列表视图的大小。

Snackbar 有问题

普通小吃店(键盘未启动)

我已经能够通过以编程方式设置高度来稍微解决这个问题,但是文本从小吃栏中消失了,我不知道如何将它添加回去。

                ViewGroup.LayoutParams lp = snackbarView.getLayoutParams();
                lp.height = 150;
                snackbarView.setLayoutParams(lp);

添加小吃店如下:

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

如果有任何关于在键盘启动时不展开小吃栏的想法,我将不胜感激。提前致谢。

我也遇到了同样的情况,但是找不到问题的原因。

为了避免扩展快餐栏,我决定把它放在键盘后面。这是通过将此行添加到清单

上所需的 activity 来实现的
android:windowSoftInputMode="adjustNothing"

我真的很想知道为什么会这样,因为在这个项目中我经常使用 snackbar 而它只有一个中断 activity

我注意到只有当 Snackbar 附加到 CoordinatorLayout 时才会发生这种情况,而 CoordinatorLayout 在层次结构的某处有另一个 CoordinatorLayout 父级。我猜 的行为因为多个 CoordinatorLayouts 而重复,并且 Snackbar 最终占据了整个屏幕。

解决方案是将 Snackbar 附加到最顶层的 CoordinatorLayout。在我的场景中,我有一个带有 CoordinatorLayout 内容视图的 Activity,它托管一个以 CoordinatorLayout 作为根视图的片段。当片段需要显示 Snackbar 时,它会将其附加到 Activity 的 CoordinatorLayout,然后在显示键盘时它会正确运行。请注意,我现在使用的是 AndroidX 库而不是支持库,因此行为可能略有不同。

只需将此 属性 放入您的 Manifest 文件到您正确的 activity。

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