Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 上下移动浮动操作按钮以避免被蛇形条阻挡_Android_Floating_Floating Action Button - Fatal编程技术网

Android 上下移动浮动操作按钮以避免被蛇形条阻挡

Android 上下移动浮动操作按钮以避免被蛇形条阻挡,android,floating,floating-action-button,Android,Floating,Floating Action Button,我用它来实现一个浮动操作栏,当屏幕上出现一个快捷键时,我似乎找不到移动按钮的方法。甚至可以使用该库吗?您可以切换到并使用它来指定视图的行为 CoordinatorLayout是一个超级强大的框架布局 CoordinatorLayout用于两个主要用例: 作为顶级应用装饰或镀铬布局 作为与一个或多个子视图进行特定交互的容器 通过为CoordinatorLayout的子视图指定行为,可以提供许多 单个父级中的不同交互以及这些视图也可以 相互影响。视图类可以指定默认行为 使用DefaultBehavi

我用它来实现一个浮动操作栏,当屏幕上出现一个快捷键时,我似乎找不到移动按钮的方法。甚至可以使用该库吗?

您可以切换到并使用它来指定视图的行为

CoordinatorLayout是一个超级强大的框架布局

CoordinatorLayout用于两个主要用例:

  • 作为顶级应用装饰或镀铬布局
  • 作为与一个或多个子视图进行特定交互的容器
  • 通过为CoordinatorLayout的子视图指定行为,可以提供许多 单个父级中的不同交互以及这些视图也可以 相互影响。视图类可以指定默认行为 使用DefaultBehavior作为CoordinatorLayout的子级时 注释

    行为可用于实现各种交互和 其他布局修改,包括滑动抽屉和 可滑动可拆卸元件和按钮的面板,这些元件和按钮会粘在其他元件上 元素移动和设置动画时

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


    尝试使用
    android.support.design.widget.FloatingActionButton
    CoordinatorLayout

    然后试试这个:

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

    您可以使用将parentLayout设置为FAB

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

    对于任何希望在将来得到答案的人

    用作浮动动作按钮父布局的协调器布局将自动为您处理动画效果

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

    科特林:

    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
        }
    
    .....
    
    }
    
    类CustomBehavior:CoordinatorLayout.Behavior{
    ....
    覆盖附加的ToLayoutParams(参数:CoordinatorLayout.LayoutParams){
    super.onAttachedToLayoutParams(参数)
    //将DodgeInsertedges设置为底部,这样我们可以避开任何小吃条
    params.dodgeinstedges=重力.BOTTOM
    }
    .....
    }
    
    您应该了解github的问题。我是这个时候来的。这太棒了。我一定错过了,因为我已经看过GH的问题了。谢谢我现在开始工作了,太棒了。我在考虑放弃使用那个图书馆。修复起来容易吗?是的,我确实遵循了你链接到的讨论中的建议。当snackbar显示时,使用
    fab.animate().translationBy(-snackbar.getHeight())
    ,当snackbar隐藏时,除了在
    getHeight()之前使用负号之外,使用相同的方法。这有点令人讨厌,因为可能发生的情况是,用户在初次按下按钮后继续按下按钮,浮动按钮继续上升。我只是用了一些布尔逻辑来标记按钮的当前状态作为一种解决办法。@naja,你能把你所做的事情贴出来吗。您是如何获得snackbar实例的,以及您是如何发现它何时关闭、何时打开的,而不是自定义浮动操作按钮或菜单。因此,动画必须手动完成,但对于本机晶圆厂,这应该是最简单和公认的答案。或者您也可以在XML中使用
    app:layout\u dodgeinsetteges=“bottom”
    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();
    
    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
        }
    
    .....
    
    }