【问题标题】:Moving Floating Action Button up and down to avoid getting blocked by a snackbar上下移动浮动操作按钮以避免被小吃店挡住
【发布时间】:2015-03-10 20:22:33
【问题描述】:

我正在使用this library 来实现浮动操作栏,但当屏幕上出现快餐栏时,我似乎找不到移动按钮的方法。那个图书馆甚至有可能吗?

【问题讨论】:

  • 太棒了。我一定错过了那个,因为我已经看过 GH 问题。谢谢!我现在开始工作了。
  • 太棒了。我正在考虑使用那个库。容易修复吗?
  • 是的,我确实遵循了您链接到的讨论中的建议。当显示快餐栏时,使用fab.animate().translationYBy(-snackbar.getHeight()),当它被隐藏时,使用相同的东西,除了在getHeight() 之前省略负号。这有点骇人听闻,因为可能发生的情况是用户在初始按钮按下后继续按下按钮并且浮动按钮继续上升。我只是使用了一些布尔逻辑将按钮的当前状态标记为一种解决方法。
  • @naja 你能发布你所做的事情吗?你是如何获得小吃店实例的,你是如何找到它何时关闭和何时打开的

标签: android floating floating-action-button


【解决方案1】:

您可以切换到android.support.design.widget.FloatingActionButton 并使用CoordinatorLayout 为您的视图指定行为。

CoordinatorLayout 是一个超级强大的 FrameLayout。

CoordinatorLayout 适用于两个主要用例:

  1. 作为顶级应用程序装饰或 chrome 布局
  2. 作为与一个或多个子视图进行特定交互的容器

通过为 CoordinatorLayout 的子视图指定行为,您可以提供许多 单亲内的不同交互,这些视图也可以 彼此互动。视图类可以指定默认行为 当使用 DefaultBehavior 用作 CoordinatorLayout 的子级时 注释。

行为可用于实现各种交互和 额外的布局修改,从滑动抽屉和 面板滑动可关闭的元素和粘在其他按钮上的按钮 元素移动和动画。

CoordinatorLayout 的子级可能有一个锚。此视图 ID 必须 对应于 CoordinatorLayout 的任意后代,但它 可能不是被锚定的孩子本身或被锚定的后代 孩子。这可用于相对于其他视图放置浮动视图 任意内容窗格。

【讨论】:

    【解决方案2】:

    尝试使用android.support.design.widget.FloatingActionButtonCoordinatorLayout

    然后试试这个:

    fabView = findViewById(R.id.floating_action_button_id);
    Snackbar.make(fabView, "Hi", Snackbar.LENGTH_LONG).show()
    

    【讨论】:

      【解决方案3】:

      您可以使用设置 parentLayout - 为 FAB,

      Snackbar.make(parentLayout, R.string.snackbar_text,Snackbar.LENGTH_LONG).setAction(R.string.snackbar_action, myOnClickListener).show();
      

      【讨论】:

        【解决方案4】:

        对于任何在未来寻找答案的人..

        Coordinator Layout 作为 Floating Action Button 的 Parent Layout 会自动为你处理动画效果。

        浮动操作按钮有一个默认行为,它会检测到正在添加的 Snackbar 视图,并相应地在 Snackbar 的高度上方为按钮设置动画。

        Floating Action Button Behavior

        <android.support.design.widget.CoordinatorLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/clayout">
        <android.support.design.widget.FloatingActionButton
            android:id="@+id/fab_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|right"
            android:layout_marginBottom="16dp"
            android:layout_marginRight="16dp"
            android:src="@drawable/filter_icon"
            app:rippleColor="@color/colorGray"
            app:fabSize="normal"
            app:borderWidth="0dp"/>
        </android.support.design.widget.CoordinatorLayout>
        

        然后我们的 SnackBar 代码将使用 Coordinatorlayout[here layout] 作为父布局,如下所示:

        Snackbar.make(clayout, "Click on row to know more details", Snackbar.LENGTH_LONG)
                            .setAction("OK", new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
        
                                }
                            }).show();
        

        【讨论】:

        • 但不适用于自定义浮动操作按钮或菜单。所以动画必须手动完成
        • 但是,对于原生 FAB,这应该是最简单且被接受的答案。
        【解决方案5】:

        科特林:

        class CustomBehavior : CoordinatorLayout.Behavior<FloatingActionButton> {   
        
        ....
        
            override fun onAttachedToLayoutParams(params: CoordinatorLayout.LayoutParams) {
                super.onAttachedToLayoutParams(params)
        
                //set dodgeInsetEdges to BOTTOM so that we dodge any Snackbars
                params.dodgeInsetEdges = Gravity.BOTTOM
            }
        
        .....
        
        }
        

        【讨论】:

        • 或者你也可以在XML中使用app:layout_dodgeInsetEdges="bottom"
        猜你喜欢
        • 2020-08-15
        • 1970-01-01
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 2023-04-07
        • 2020-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多