如何更改Android Snackbar';从底部到顶部的初始对齐?

如何更改Android Snackbar';从底部到顶部的初始对齐?,android,material-design,android-design-library,snackbar,android-snackbar,Android,Material Design,Android Design Library,Snackbar,Android Snackbar,最近的android库几天前才推出,但我希望SnackBar显示在屏幕顶部,最好是在相对窗口内,作为其父视图 如何将SnackBar的初始对齐方式(我假定为layout\u alignParentBottom更改为layout\u alignParentTop?否,根据材料设计: snackbar通过在屏幕底部显示一条简短的消息来提供有关操作的轻量级反馈。 由于设计库试图实现材料设计规范,因此无法将Snackbar定位在屏幕底部以外的任何位置(或包含坐标或布局)。可以使用以下方法使Snackba

最近的android库几天前才推出,但我希望
SnackBar
显示在屏幕顶部,最好是在相对窗口内,作为其父视图


如何将
SnackBar
的初始对齐方式(我假定为
layout\u alignParentBottom
更改为
layout\u alignParentTop

否,根据材料设计:

snackbar通过在屏幕底部显示一条简短的消息来提供有关操作的轻量级反馈。


由于设计库试图实现材料设计规范,因此无法将Snackbar定位在屏幕底部以外的任何位置(或包含
坐标或布局)。

可以使用以下方法使Snackbar显示在屏幕顶部:

Snackbar snack = Snackbar.make(parentLayout, str, Snackbar.LENGTH_LONG);
View view = snack.getView();
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams();
params.gravity = Gravity.TOP;
view.setLayoutParams(params);
snack.show()
注意:snackbar的动画从底部开始,并如预期的那样上升到屏幕的顶部,因为根据ianhanniballake的回答,它打算位于底部


对于从顶部涌出的通知,最好使用自定义横幅。

可以用简单的方法完成

首先创建包含snackbar的布局

<LinearLayout
    android:id="@+id/info_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"/>

这里有一个简单的方法,可以使用CoordinatorLayout从屏幕顶部添加SnackBar,但动画仍然是一个问题

只需将CoordinatorLayout布局添加到布局中,如下所示:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:id="@+id/snackbarlocation">
</android.support.design.widget.CoordinatorLayout>

您可以获取snackbar的layoutparam并更改代码中的底部边距。 像

然后,您可以随时使用snackbar实例来显示

snackbar.show();

你需要把其他动画也。在形式上,在形式上,在形式上,在形式上,在形式上,在形式上,在形式上。选中此项,但我会在屏幕顶部显示它,这意味着它现在是可能的。也许这在过去是不可能的。@zeeshan根据公认的答案,与Snackbar关联的动画仅采用底部定位,因为这是唯一受支持的定位。抱歉,仅仅因为您可以执行某些操作并不意味着它受支持。如前所述,动画假定它位于容器的底部。我不明白你想暗示什么。问题是关于SnackBar的定位。任何人都可以做到,而且完全支持将其放在屏幕上的任何位置。这超出了这个问题的范围,谷歌会支持什么,不支持什么,或者做什么。我也不知道如何控制吐司的位置。我知道它的时间不能改变。
    CoordinatorLayout Clayout = (CoordinatorLayout)findViewById(R.id.snackbarlocation);

    FabButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Snackbar.make(Clayout, "This snack bar located at top", Snackbar.LENGTH_SHORT).show();
        }
    });
Snackbar snackbar = Snackbar.make(rootView, message, Snackbar.LENGTH_LONG);
View view = snackbar.getView();
FrameLayout.LayoutParams para = (CoordinatorLayout) view.getLayoutParams();
params.bottomMargin = showAtLocation // pass your location offset here
view.setLayoutParams(params);
snackbar.show();