首页 > 解决方案 > 在用户触摸时关闭 FAB 子菜单

问题描述

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

我尝试过使用 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;
}

标签: androidfloating-action-buttonsubmenu

解决方案


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


推荐阅读