手动关闭小吃店时向下移动按钮

问题描述

所以我有以下基本代码来确保我的按钮在出现快餐栏时会出现:

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 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_width="match_parent"
 android:layout_height="match_parent"
 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_width="match_parent"
        android:layout_height="match_parent" >
    </ListView>


    <com.example.dochjavatestimplementation.pkgTestforend.CustomLinearLayout
        android:layout_width="match_parent"
        android:id="@+id/cusll"
        android:layout_height="match_parent"
        >

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
            <com.google.android.material.floatingactionbutton.FloatingActionButton
                android:id="@+id/btnopenDriverAddFragment2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/baseline_person_add_24"
                />

        </RelativeLayout>

    </com.example.dochjavatestimplementation.pkgTestforend.CustomLinearLayout>


</androidx.coordinatorlayout.widget.CoordinatorLayout>

这工作得很好,但问题是当手动关闭小吃栏时按钮仍然保持向上:

remains up

为了解决这个问题,我尝试了以下方法

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();

然而,这并不是很好,因为小吃店似乎仍然可见/按钮被关闭的小吃店覆盖?

dissmised

为什么会这样,小吃店基本上仍然可见但被忽略了?

解决方法

btnOpenDriverAddFragment2.setTranslationY(90); 更改为 customLinearLayout.setTranslationY(0); 将解决您的问题。

由于不仅按钮向上移动,而且自定义线性布局也是按钮的父级,因此您只需要重置父级的 y 位置。 你只是改变了按钮的 y 值,但你忘记了线性布局。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...