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