如何在屏幕上的任意位置单击时隐藏晶圆厂?

How to hide fab on clicking anywhere in screen?

我正在使用 Floating Action Button。我正在使用这个库,因为我需要收件箱风格的工厂。问题是,我只能在单击底部 fab 时关闭浮动操作菜单。我需要的是,如果我点击屏幕上的其他任何地方,那么 fab 也应该像收件箱应用程序中那样崩溃。如何实现这种行为?此库中是否有任何我可以使用的属性,或者我是否需要自己实现该行为?

该库有一个方法 setClosedOnTouchOutside(boolean close) 您可以使用。

floatingActionMenu.setClosedOnTouchOutside(true);

但这仅适用于 floatingActionMenu 的覆盖区域。如果您想通过单击布局中的任意位置来关闭它,那么您应该尝试 this.

如果你使用compile 'com.getbase:floatingactionbutton:1.8.0'

并且有浮动操作菜单并且想在单击屏幕上的任意位置后关闭菜单试试这个

floatingActionsMenu = (FloatingActionsMenu) findViewById(R.id.fab_menu);

listView.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        if (floatingActionsMenu.isExpanded())
            floatingActionsMenu.collapse();
        return false;
    }
});

false <- 使视图继续滚动

Misho Zhghenti 使用 compile 'com.getbase:floatingactionbutton:1.8.0' 的解决方案不正确,因为它指定了 listView 上的触摸事件。这是正确的实现:

@Override public boolean dispatchTouchEvent(MotionEvent event){
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (fabMenu.isExpanded()) {
            Rect outRect = new Rect();
            fabMenu.getGlobalVisibleRect(outRect);
            if(!outRect.contains((int)event.getRawX(), (int)event.getRawY())) {
                fabMenu.collapse();
                return false;
            }
        }
    }
    return super.dispatchTouchEvent(event);
}

适用于应用程序的任何位置,而不仅仅是 listView。将其放入您的 Activity.

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN){
        if (fam_main.isOpened()){
            Rect outRect = new Rect();
            fam_main.getGlobalVisibleRect(outRect);
            if (!outRect.contains((int)event.getRawX(), (int) event.getRawY())){
                fam_main.close(true);
            }
        }
    }
    return super.dispatchTouchEvent(event);
}

***注意 fam_main 是您的 FAB 菜单 ID FloatingActionMenu