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

Posted

技术标签:

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

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

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

【问题讨论】:

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

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

【讨论】:

你还需要放其他动画。 in_form_top 和 out_to_top。检查这个***.com/a/33333521/1031297【参考方案3】:

可以通过简单的方式完成

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

<LinearLayout
    android:id="@+id/info_container"
    android:layout_
    android:layout_
    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_
    android:layout_
    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();

【讨论】:

以上是关于如何从底部到顶部更改 Android Snackbar 的初始对齐方式?的主要内容,如果未能解决你的问题,请参考以下文章

在多行选项卡控件中将它们从底部移动到顶部时,标签页正在跳跃

如何移动从底部到顶部的图形的标题?

如何在 android 中更改 ExoPlayer 字幕位置?

Android ListView拉到顶/底部,像橡皮筋一样弹性回弹复位

Spring Data JPA:是不是可以让spring从表格底部检索数据到顶部顺序

Xamarin.Forms 页面底部到顶部动画