android - 在用户触摸时关闭 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;
}
解决方案
尝试onTouchListener
在基本布局上设置 a 。您可以在那里检查MotionEvent.ACTION_UP
并关闭您的 fab 子菜单(如果它已打开)。
推荐阅读
- c++ - 指令减少 33%,内存访问减少 17%,但速度提高了 4 倍?
- javascript - 如何在 Select 上设置默认值并将该值保存到控制器
- python - 不和谐机器人 python 数学
- java - 将目的地添加到 NavGraph
- c# - .NET Core MVC 参数验证
- c - 将长整数数组存储到文件中
- android - 在 Android 中从 Uri 获取文件名
- python - int 中的日期列
- sql - 为什么 where exists 不返回子查询中的所有行?
- ruby-on-rails - Redis 重定向到 Heroku 上的 localhost (Rails 6)