14

最近的 android 库就在几天前问世,但我希望它SnackBar出现在屏幕顶部,最好是在 RelativeLayout 中,因为它是父视图。

如何改变SnackBar我认为的初始对齐layout_alignParentBottom方式layout_alignParentTop

4

5 回答 5

36

可以使用以下方法使小吃栏出现在屏幕顶部:

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 的回答,它打算位于底部。

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

于 2015-06-02T00:52:16.473 回答
14

不,根据 Snackbars 的材料设计规范

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

由于设计库试图实现材料设计规范,因此不可能将 Snackbar 定位在屏幕底部(或包含CoordinatorLayout)之外的任何位置。

于 2015-06-02T00:41:47.850 回答
4

这是从屏幕顶部使用 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>

然后在您的 Activity 中获取对它的引用并将其传递给 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();
        }
    });

学分

于 2015-08-16T21:23:42.710 回答
2

好了,你可以获取snackbar的layoutparam,在代码中修改bottomMargin。喜欢

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实例随时显示

snackbar.show();
于 2016-11-18T21:43:04.927 回答
1

可以通过简单的方式完成

首先创建要包含小吃吧的布局

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

然后在代码中

  ll_mesg.addView(Snackbar.make(ll_mesg, "Please choose your luck from one of box", Snackbar.LENGTH_LONG)
            .getView());
    new Handler().postDelayed(new Runnable() {
        public void run() {
            ll_mesg.removeAllViews();
            }
        }
        ,1000);
于 2015-06-29T15:37:11.697 回答