- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是我的布局结构:
- RelativeLayout (full screen)
- FrameLayout (full screen)
- Button (in the middle of the screen)
- RecyclerView (align parent bottom but with very big padding top to
capture the scrolling also in the top of the screen, so it's basically acting like a full screen `RecyclerView`)
是的,这些 View 相互重叠。
因为 RecyclerView
是最顶层的 View ,它捕获屏幕上的所有触摸事件,并吞下它们,防止任何触摸“通过它”到它下面的底层 View 。 (注意:对于底层 View ,我不是指 RecyclerView
的子级,而是其他 rootview 的
子级)
我已经阅读了大量关于传播触摸事件和防止吞咽触摸事件等的 stackoverflow 帖子,尽管这看起来很容易完成,但我无法实现以下效果:
我想让我的 RecyclerView
捕捉触摸事件,这样它就会滚动或发生其他情况。但我希望 rootView
认为 RecyclerView
没有捕获事件,并继续将它传递给它的其他子级(rootview
'的 child )。
这是我尝试做的事情:
1。重写 RecyclerView
的 dispatchTouchEvent
以执行其逻辑并返回 false 以作为它没有分派(dispatch)其触摸事件的行为,因此 Root View 将继续迭代以通过其 subview 进行触摸。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
super.dispatchTouchEvent(ev);
return false;
}
发生了什么:
RecyclerView
仍然有效,但仍然吞噬所有触摸事件(与以前一样)
2。重写 RecyclerView
的 onTouchEvent
以执行其逻辑并返回 false。 (注意:我知道这似乎不是解决方案,但我试过了)
@Override
public boolean onTouchEvent(MotionEvent e) {
super.onTouchEvent(e);
return false;
}
发生了什么:
与#1 相同的结果
我已经用同样的想法做了一些调整,但它们并没有奏效,所以我现在有点无能为力,希望得到你们的帮助!
最佳答案
我有两个建议给你:
第一个更简单,但假设您要单击 Button
,它可以出现在 RecyclerView
上方,如果是这种情况,您可以只需更改布局的顺序:
- RelativeLayout (full screen)
- FrameLayout (full screen)
- RecyclerView
- Button (in the middle of the screen)
如果你需要更通用的东西,那么可以这样做:
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int [] pos = new int[2];
recyclerView.getLocationOnScreen(pos);
Rect rect = new Rect();
button.getHitRect(rect);
if (rect.contains((int) event.getX() + pos[0], (int) event.getY() + pos[1])) {
button.onTouchEvent(event);
}
return false;
}
});
您将需要单独处理所有 View ,这不是很好,但在我的测试中有效。
注意:如果您已将 addOnItemTouchListener
添加到您的 RecyclerView
,您将需要将上述功能添加到 onInterceptTouchEvent
(或到两个地方,取决于您的项目和 RecyclerView
)。
关于java - Topmost View 吞下触摸事件,因为重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44894937/
我需要浏览一个文件,然后将捆绑包与另一个文件连接起来。我尝试了下面的 gulp 代码,但它无法正常工作。 当我在 mymodule.js 中进行更改并运行 gulp 时,这些更改会出现在包文件中,但不
尝试创建 Flux 存储。当我运行 gulp 并检查我的 index.html 时,出现错误“Uncaught TypeError:监听器必须是函数” var AppDispatcher = requ
我在提醒自己“关键字”时偶然发现了这篇文章 http://effbot.org/zone/python-with-statement.htm 。我只是有一个小问题,可能是显而易见的问题。文章指出,这“
我正在使用 Oracle 11g(瘦驱动程序)和 Java 6 在 Windows 上的 Tomcat 7 中开发一个应用程序。我正在开发一个页面,让用户验证存储在 Oracle 数据库中的 SQL
除了向每个回调添加 try..catch block 之外,是否有任何方法可以处理从 jQuery 中的 AJAX 回调抛出的异常?在这种情况下不会调用错误函数。 $.ajax( { url:
我已经编写了代码(如下),以便能够将输入字段拖到另一个输入字段上,但似乎可拖动的燕子 input[text].onfocus . 这会导致问题,即所有可拖动的输入字段都被禁用(firefox)并且单击
在 jQuery 中,如果您在 ajax 回调方法中出错,您将收到正确的控制台错误消息和堆栈跟踪。 $.get("https://api.github.com/users/octocat/orgs",
我正在使用 Apache PdfBox 库,我注意到几乎所有东西都会抛出 IOException,考虑到大多数 IOException 实际上应该是非法状态异常,处理起来非常烦人,但似乎 apache
嘿,我是原型(prototype)的新手。问题是 dom:loaded 回调函数中的 javascript 错误不会在 firefox (webconsole/errorconsole/firebug
我有一个文本框,里面有这个: 问题是它吞下了 Tab 而不是跳转到下一个控件。如何捕获文本框的 Tab 键并仍然按 Tab 键顺序保留到下一个控件的 Tab 键?编辑:我也在使用 MVVM 并且 M
我正在尝试让 googletest 在我的 C++ 项目上运行,其中一部分涉及使用 EXPECT_THROW(statement, expected_exception);。我正在使用选择了“Appl
我不明白为什么原型(prototype)会抑制 dom:loaded 事件和 AJAX 处理程序中的错误消息。 给定以下 HTML 片段: Conforming XHTM
我是一名优秀的程序员,十分优秀!