顶部的 SnackBar。这可能吗?

SnackBar from top. Is this possible?

我想从顶部提供 SnackBar 动画,而不是从底部显示 SnackBar 的常规行为。这很容易破解吗?

不,这是不可能的。文档指出

They show a brief message at the bottom of the screen on mobile and lower left on larger devices. Snackbars appear above all other elements on screen and only one can be displayed at a time.

您可以使用第三方库,例如 Crouton

有可能。 检查我制作的这个库 https://github.com/AndreiD/TSnackBar

基本上你添加了 2 个新的从顶部滑动的动画,并改变了布局的重力。就这样:)

稍后编辑:出现了一个错误......如果有人想花一些时间来修复它,我们都会很感激:)

 CoordinatorLayout   coordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinatorLayout);
  Snackbar snackbar = Snackbar.make(coordinatorLayout, "Text", Snackbar.LENGTH_LONG);
   View view = snackbar.getView();
   CoordinatorLayout.LayoutParams params =(CoordinatorLayout.LayoutParams)view.getLayoutParams();
                params.gravity = Gravity.TOP;
                view.setLayoutParams(params);
      snackbar.show();

编辑:此解决方案在顶部呈现 Snackbar,但动画是从底部开始的。

这是可能的,至少有 Android Material 库和一些小技巧。 您可以将 snackbar 绑定到呈现在顶部位置的视图,如下所示:

activity_main.xml:

<!-- rest of the components here -->

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:id="@+id/top_coordinator"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="top"/>

MainActivity.kt:

val snackbar = Snackbar.make(
    findViewById(R.id.top_coordinator),
    "Hello World",
    Snackbar.LENGTH_INDEFINITE
)

snackbar.show()