手动关闭小吃店时向下移动按钮
Posted
技术标签:
【中文标题】手动关闭小吃店时向下移动按钮【英文标题】:Move Button down when dissmising snackbar manually 【发布时间】:2021-08-03 15:56:02 【问题描述】:所以我有以下基本代码,可确保在出现快餐栏时我的按钮升起:
public class MoveUpwardBehavior extends CoordinatorLayout.Behavior<View>
private static final boolean SNACKBAR_BEHAVIOR_ENABLED;
@Override
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency)
return SNACKBAR_BEHAVIOR_ENABLED && dependency instanceof Snackbar.SnackbarLayout;
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency)
float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
child.setTranslationY(translationY);
return true;
static
SNACKBAR_BEHAVIOR_ENABLED = Build.VERSION.SDK_INT >= 11;
我的自定义线性布局:
public class CustomLinearLayout extends LinearLayout implements CoordinatorLayout.AttachedBehavior
MoveUpwardBehavior mb = new MoveUpwardBehavior();
public CustomLinearLayout(Context context)
super(context);
public CustomLinearLayout(Context context, AttributeSet attrs)
super(context, attrs);
public CustomLinearLayout(Context context, AttributeSet attrs, int defStyleAttr)
super(context, attrs, defStyleAttr);
@NonNull
@Override
public CoordinatorLayout.Behavior getBehavior()
return mb;
最后但并非最不重要的是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
xmlns:app="http://schemas.android.com/apk/res-auto"
app:layout_behavior=".pkgActivity.MoveUpwardBehaviour"
tools:context=".pkgTestforend.DriverListFragment">
<ListView
android:id="@+id/listAllDrivers"
android:layout_
android:layout_ >
</ListView>
<com.example.dochjavatestimplementation.pkgTestforend.CustomLinearLayout
android:layout_
android:id="@+id/cusLL"
android:layout_
>
<RelativeLayout
android:layout_
android:layout_>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/btnOpenDriverAddFragment2"
android:layout_
android:layout_
android:src="@drawable/baseline_person_add_24"
/>
</RelativeLayout>
</com.example.dochjavatestimplementation.pkgTestforend.CustomLinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
这工作得很好,但问题是按钮仍然打开,当手动关闭快餐栏时:
为了解决这个问题,我尝试了以下方法:
Snackbar kd = Snackbar.make(customLinearLayout, "Text to display", Snackbar.LENGTH_LONG)
.addCallback(new Snackbar.Callback()
@Override
public void onDismissed(Snackbar snackbar, int event)
if (event == Snackbar.Callback.DISMISS_EVENT_SWIPE)
btnOpenDriverAddFragment2.setTranslationY(90); //lower button down manually!
@Override
public void onShown(Snackbar snackbar)
);
kd.show();
但是,这不是很好,因为小吃栏似乎仍然可见/按钮被解除的小吃栏覆盖?
为什么会这样,snackbar 基本上保持可见但被忽略了?
【问题讨论】:
【参考方案1】:将btnOpenDriverAddFragment2.setTranslationY(90);
更改为 customLinearLayout.setTranslationY(0);
将解决您的问题。
由于不仅按钮向上移动,而且自定义线性布局也是按钮的父级,因此您只需重置父级的 y 位置。 你只是改变了按钮的y值,但你忘记了线性布局。
【讨论】:
以上是关于手动关闭小吃店时向下移动按钮的主要内容,如果未能解决你的问题,请参考以下文章
关闭 Snackbar 时,FloatingActionButton 不会出现