【问题标题】:SnackBar from top. Is this possible?SnackBar 从顶部。这可能吗?
【发布时间】:2015-10-18 01:12:30
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    基本上,您添加 2 个新动画用于从顶部滑动,并更改布局的重力。就是这样:)

    稍后编辑:有一个错误正在发生......如果有人想花一些时间来修复它,我们将不胜感激:)

    【讨论】:

    • 不幸的是,您的库有一个巨大的错误,如果您更改活动/片段,TSnackBar 只会出现一次,因此很遗憾它在生产中无法使用。
    • @HenriquedeSousa 巨大的..比如说 100 米高?还是像 150 公斤一样大? ....没有时间修复它,但欢迎您进行 PR。
    • 我正在尝试修复它,但我找不到原因,如果您知道它在哪里,请解释一下,我会在空闲时间尝试查看它,谢谢!
    • 不,我只是在另一个空布局的顶部添加了一个简单的视图。没有动画,没有单一的支持。我的客户不会付钱让我进一步调查:
    • @HenriquedeSousa 我通过使用单例类解决了这个问题,并且每次都创建一个新的小吃店。现在对我来说很好。如果有人感兴趣,我可以分享代码。
    【解决方案2】:

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

    它们会在移动设备屏幕的底部显示一条简短消息,并且 在较大的设备上左下方。小吃店出现在所有其他之上 屏幕上的元素,一次只能显示一个。

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

    【讨论】:

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

      【讨论】:

      • 我已经尝试让它连续工作超过 48 小时。我知道这样做是不鼓励的,但作为一个因尝试我之前发现的一切而筋疲力尽的人,谢谢,非常感谢。您的解决方案是唯一对我有用的解决方案。
      • 它可以将视图移动到顶部,但动画仍然是从下到上,对吧?
      • 它在 android 6 上崩溃
      【解决方案4】:

      编辑:此解决方案将 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()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-27
        • 2019-08-03
        • 2017-10-03
        • 2021-03-15
        • 2015-10-23
        • 2018-04-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多