【问题标题】:How to hide fab on clicking anywhere in screen?如何在单击屏幕上的任意位置时隐藏工厂?
【发布时间】:2015-12-29 08:27:12
【问题描述】:

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

【问题讨论】:

  • 为什么不设置它的可见性 Visibity.GONE?您可以将其添加到该视图上任何内容的 onClick 行为中。

标签: android floating-action-button


【解决方案1】:

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

floatingActionMenu.setClosedOnTouchOutside(true);

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

【讨论】:

    【解决方案2】:

    如果你使用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

    【讨论】:

    • 你能解释一下这里的“listView”是什么吗?
    【解决方案3】:

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

    可在应用程序的任何位置工作,而不仅仅是列表视图。将其放在您的 Activity 中。

    【讨论】:

      【解决方案4】:
      @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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-13
        • 2022-06-22
        • 1970-01-01
        • 1970-01-01
        • 2017-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多