- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在看到 couple 之后关于 SO 的问题,关于 Fragments
将他们的点击事件“传递”到底层 Fragments
中的可点击 Views
,我记得我曾经遇到过这个问题。实际发生的情况是,如果用户点击最上面的 Fragment
的空白区域,由于其 ViewGroup
不可点击,事件将由可点击的 View
(即 Button
),方便地放置在用户手指下方。我通过使顶部 Fragment
的 ViewGroup
可点击来修复它。当时我并没有多想,但这个解决方案似乎有点“hacky”。
我知道对于默认情况下不可点击的 View
来说,不拦截点击事件是正常的行为,但是人们会认为考虑到 Fragments
是显示 View 层次结构(仅由 Activity
完成的任务),它在这个意义上类似于 Activity
。当一个 Activity
触发 Intent
以创建一个新的 Activity
,然后这个 Activity
出现在屏幕上时,没有点击事件传递给底层 Activity
。我意识到 Activity
可以包含许多 Fragments
可能不会填满整个屏幕甚至没有 xml,但有时点击事件只意味着最顶层保留 fragment
。
说了这么多,问题来了:
1) 将最顶部的 Fragment
上的 ViewGroup
设置为可点击是解决此问题的最佳方法吗?
2) 是否存在此功能但我不知道?如果不是,应该吗?
最佳答案
Is setting the ViewGroup on the top most Fragment the best way to solve this?
假设您的 UI 类似于您链接到的问题中的 UI,则 UI 编写不当。
我对这个问题的用户界面的看法是,开发人员有两个 fragment ,A 和 B,每个 fragment 都填满了屏幕。 A 最初在那里,底部有三个按钮。然后,开发人员调用 add()
来显示 B,其中 B 具有不透明的黑色背景。
这在几个层面上是愚蠢的。您不仅会遇到此触摸事件传播问题,而且还会遇到 overdraw 问题,因为 Android 将渲染按钮,然后在它们之上渲染黑色背景。
这里的正确答案是用 B replace()
A。
(我意识到开发人员实际上没有 fragment A,但在 Activity 中有那些小部件,这为该 UI 添加了另一个级别的粗略度)
更一般地说,我不会为了隐藏底层小部件而在 Z 轴上设置更高的 fragment 或任何其他内容。因此,例如,拥有一个全屏 VideoView
,在 Z 轴上有一个弹出式 MediaController
就可以了,因为将选择发往 Controller 的触摸事件由 Controller 向上移动,但用户仍然可以点击未被 Controller 阻挡的 VideoView
部分。相反,我不会通过让一个 WebView
在 Z 轴上覆盖另一个 WebView
来实现选项卡式 Web 浏览器——要么只有一个 WebView
,否则只有一个可见WebView
(另一个从 View 层次结构中删除或标记为View.GONE
)。
When one Activity fires the Intent to create a new Activity, and then this Activity is on the screen, no click events are delivered to the underlying Activity.
那是因为在 View 层次结构方面没有“底层 Activity ”。更技术地说,每个 Activity 都在它自己的 Window
中,因此即使最顶层的 Window
没有填满屏幕(例如,对话框主题的 Activity ),“底层 Activity ”可见但无法接收触摸事件。
I realize that an Activity can contain many Fragments that may not fill the whole screen or even have no xml, but sometimes click events are only meant to be retained by the top most Fragment.
恕我直言,那么“最上面的 fragment ”下面不应该有任何东西。在执行此类 UI 切换时,请使用 replace()
,而不是 add()
。或者,使用 DialogFragment
,如果您想暂时让某些模态接管前景输入(如果我理解正确的话,因为对话框有自己的 Window
)。不要只绘制纯色背景并假装现在已覆盖的其他小部件不存在。
Does this feature exist and I am not aware of it?
不,因为 fragment 不是 ViewGroups
,因此不参与管理触摸事件的路由。
And if not, should it?
恕我直言,不,尽管欢迎您为其提出问题。
关于android - fragment 不应该有一个选项来在它们的 View 层次结构中保留点击事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21144782/
给定一个 Option[Future[Option[Int]]] : scala> val x: Option[Future[Option[Int]]] = Some ( Future ( Some
如果我理解正确,EitherT[Option,A,B] 应该与 Option[Either[A,B]] 相同,但编译器不同意.以下代码编译失败: def f[A,B] = implicitly[Eit
我刚开始在使用 parcel.js 构建静态 Assets 时遇到此错误。它在本地工作,但我在 Heroku 上的构建出错,我不确定它是否相关。 最佳答案 得到同样的问题。通过将 core-js 安装
当我生成 Telerik Report 时,只有 Export PDF 可用。即使我将 docx 和 xlsx 的配置设置为 true。这是我在网络配置中的配置。
我的 iTunesConnect 应用程序显示 Apple Pay 选项。我正在使用布伦特里。 即使我们没有在应用程序中使用 Apple Pay 功能。 有人可以帮我解决如何在我的 itunesCon
我正在 Raspbian 中从命令行运行以下查询: mysql -u $NAME -p $PASS Tweets -e "SELECT count(*) FROM raw_tweets;" 它输出以下
我正在尝试使用 ffmpeg(在 linux 下)为视频添加一个小标题。所以,我使用: ffmpeg -i hk.avi -r 30000/1001 -metadata title="SOF" hk_
我正在尝试使用 ffmpeg 使用 ffserver 流式传输视频。您将在 ffserver1.conf 文件下方找到 ffmpeg 命令的日志输出。 其中一个错误引用了预设,每次我尝试使用预设时,我
我正在尝试对 Option 使用 fold 或 map 操作而不是 match。 我有一个选项 val ao: Option[String] = xxxx 和一个函数 f: (String => Fu
Dockerfile documentation表示有可能通过 --platform FROM 中的选项像这样的指令: FROM [--platform=] [AS ] 在我的 dockerfile
我不确定“属性(property)”或“选项”是否是正确的术语,但这是我需要弄清楚的。 鉴于以下情况: ' $.fileup({ url: '/file/upload',
我正在尝试使用 jQuery 检查是否选择了值 = 1 的选择选项,然后将类添加到某些元素。但有些东西不起作用。可以请人看一下代码吗? 我的代码: Reservation
我对 VIM 中的这些感到困惑。有些事情需要设置,而另一些则让。 而且,我如何检查某个选项。我知道这是一个选项,因为我使用 set 来更改它。 例如,如何检查当前文件类型选项是否为 java? 最佳答
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我在看《Professional F# 2.0》一书作者展示如下代码 let a string : option = None if a.IsNone then System.Console.
我习惯使用方法顶部的 java 样板检查输入参数: public static Boolean filesExist(String file1, String file2, String file3
假设我有一串 "Insert Post -title Some PostTitle -category 2 -date-posted 2013-02:02 10:10:10" 我一直在尝试做的是将这个
从 1.3.70 EAP 开始,在 org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions 这是 var useIR: kotlin.Boolean 哪个激活
我无法获取订购捆绑商品的所有子产品及其选项。这可能吗? 最佳答案 以下是您如何找出哪些产品应与所有其他项目一起附加到列表中的捆绑产品中的方法: foreach ($order->getAllItems
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我是一名优秀的程序员,十分优秀!