【问题标题】:How do I change an Android Snackbar's initial alignment from bottom to top?如何从底部到顶部更改 Android Snackbar 的初始对齐方式?
【发布时间】:2015-08-15 14:58:33
【问题描述】:

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

如何将SnackBar 的初始对齐方式(我认为是layout_alignParentBottom)更改为layout_alignParentTop

【问题讨论】:

    标签: android material-design android-design-library snackbar android-snackbar


    【解决方案1】:

    不,根据材料设计spec for Snackbars

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

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

    【讨论】:

    • 但我将它显示在屏幕顶部,这意味着它现在是可能的。也许在过去是不可能的。
    • @zeeshan 根据接受的答案,与 Snackbar 关联的动画仅假定底部定位,因为这是唯一受支持的定位。
    • 对不起,您可以做某事并不意味着它受支持。如前所述,动画假定它位于其容器的底部。
    • 我不明白你在暗示什么。问题是关于 SnackBar 的定位。任何人都可以做到,并且完全支持将其放在屏幕上的任何位置。
    • 这超出了这个问题的范围,谷歌会支持或不支持什么,或者它会做什么。我也不知道控制 Toast 的位置。我知道它的时间不能修改。
    【解决方案2】:

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

    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 的回答,它本来应该位于底部。

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

    【讨论】:

    【解决方案3】:

    可以通过简单的方式完成

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

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

    【讨论】:

      【解决方案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();
              }
          });
      

      Credits

      【讨论】:

        【解决方案5】:

        好吧,你可以获取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();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-03
          相关资源
          最近更新 更多