在用户触摸时关闭 FAB 子菜单

Closing the FAB sub menu on user touch

我正在尝试实现一个可扩展的工厂,我实现了它并且它按预期工作,即当用户点击 fab_main 时,子菜单变为可见和活动,当用户点击 fab_main 子菜单再次变为不可见和非活动状态。 我的问题是,当用户点击屏幕时,我希望子菜单关闭(如果它是打开的),例如当前的 activity

我试过使用 ontouch(没用)和 dispatchTouchEvent(有用但我无法使用子菜单按钮

这是我实现可扩展 FAB 的代码

fab_main.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (isOpen) {
            textView_img_edit.setVisibility(View.INVISIBLE);
            textview_bg_edit.setVisibility(View.INVISIBLE);
            fab2_bg_edit.startAnimation(fab_close);
            fab1_img_edit.startAnimation(fab_close);
            fab_main.startAnimation(fab_anti_clock_wise);
            fab2_bg_edit.setClickable(false);
            fab1_img_edit.setClickable(false);
            isOpen = false;
        } else {
            textView_img_edit.setVisibility(View.VISIBLE);
            textview_bg_edit.setVisibility(View.VISIBLE);
            fab2_bg_edit.startAnimation(fab_open);
            fab1_img_edit.startAnimation(fab_open);
            fab_main.startAnimation(fab_clock_wise);
            fab2_bg_edit.setClickable(true);
            fab1_img_edit.setClickable(true);
            isOpen = true;
        }
    }
});

我在 onTouch 和 dispatchTouchEvent 中都使用了这段代码

if (isOpen) {
    textView_img_edit.setVisibility(View.INVISIBLE);
    textview_bg_edit.setVisibility(View.INVISIBLE);
    fab2_bg_edit.startAnimation(fab_close);
    fab1_img_edit.startAnimation(fab_close);
    fab_main.startAnimation(fab_anti_clock_wise);
    fab2_bg_edit.setClickable(false);
    fab1_img_edit.setClickable(false);
    isOpen = false;
}

尝试在基本布局上设置 onTouchListener。您可以检查 MotionEvent.ACTION_UP 并在那里关闭您的 fab 子菜单(如果它打开)。